Высота по умолчанию для заголовка раздела в UITableView

Я хочу установить высоту первого заголовка в моем UITableView. Для других заголовков я хочу, чтобы они оставались высотой по умолчанию. Какое значение / константу я могу использовать вместо someDefaultHeight в приведенном ниже коде?

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return someDefaultHeight;
}

Спасибо


person rein    schedule 29.07.2009    source источник
comment
Почему бы тебе не попробовать разные ценности, пока не получишь ту, которая тебе нравится?   -  person Daniel    schedule 29.07.2009
comment
@Daniel - если Apple когда-либо решит изменить значение высоты строки по умолчанию, мне нужно убедиться, что мое приложение не жестко кодирует это значение (до некоторой произвольной суммы). Лучше всего вытащить эту информацию из константы, если она где-то объявлена.   -  person rein    schedule 30.07.2009


Ответы (8)


Начиная с IOS 5.0, вы можете возвращать UITableViewAutomaticDimension в большинстве методов делегата. Его внизу страницы документации

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return UITableViewAutomaticDimension;
}
person Ajaxharg    schedule 18.01.2013
comment
хмм .. Что касается меня UITableViewAutomaticDimension возвращает -1 (жестко запрограммированная константа), и я вообще не вижу никаких разделов в моем UITableView. - person skywinder; 23.09.2013
comment
почему UITableViewAutomaticDimension показывает -1, когда NSLog это? - person S1U; 25.09.2013
comment
Это работает только в том случае, если вы используете: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section если вы реализуете метод - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section, это не сработает. - person SuperSaiyen; 26.09.2013
comment
Стоит отметить, что если вы реализуете это и метод делегата оценки и вернете UITableViewAutomaticDimension, он будет иметь нулевую высоту. - person Sam Soffes; 12.05.2015
comment
@SuperSaiyen - Он действительно работает с viewForHeaderInSection, вам просто нужно установить estimatedSectionHeaderHeight - person Robert; 07.10.2015
comment
В моем случае это сработало после того, как я установил self.tableView.estimatedSectionHeaderHeight = MY_VALUE; в viewDidLoad - person guilherme.minglini; 28.12.2016

Проверяя значения по умолчанию в моем приложении, похоже, что для сгруппированной таблицы высота по умолчанию составляет 22, а для несгруппированной таблицы по умолчанию - высота 10.

Если вы проверите значение свойства sectionHeaderHeight в своем табличном представлении, это должно вам сказать.

person paulthenerd    schedule 29.07.2009
comment
Спасибо ... Я жестко закодирую это под это. Хотя я бы хотел, чтобы это значение было постоянным. - person rein; 30.07.2009
comment
У вас это наоборот. UITableViewStyleGrouped - 22, а UITableViewStylePlain - 10. - person Michael Grinich; 27.08.2011

Собственно сделайте свое дело :)

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return kFirstSectionHeaderHeight;
    return [self sectionHeaderHeight];
}
person BadPirate    schedule 18.05.2011
comment
Я думаю, вы имели в виду return [self.tableView sectionHeaderHeight]; или, что еще лучше, return [tableView sectionHeaderHeight];. Однако оба возвращают для меня -1, возможно, потому, что я не использую перо или раскадровку. - person jk7; 31.01.2016

Для полноты: в iOS7 + высота заголовков разделов сгруппированных стилей составляет 55.5 для первого и 38 для последующих заголовков. (измерено с помощью DCIntrospect)

person ronhippler    schedule 28.05.2015

Для быстрой версии 4.2 вы должны вернуть UITableView.automaticDimension

person Muvimotv    schedule 08.01.2019

Я не уверен, какой здесь правильный ответ, но ни 10, ни 22 не кажутся правильной высотой для представления сгруппированной таблицы в iOS 5. Я использую 44 на основе этот вопрос, и, по крайней мере, он имеет примерно правильную высоту.

person Jason George    schedule 13.03.2012

Чтобы получить высоту по умолчанию, просто позвольте super обработать ее:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return [super tableView:tableView heightForHeaderInSection:section];
}
person Hendrik    schedule 02.10.2015
comment
[super tableView:tableView heightForHeaderInSection:section]; возвращает мне 0, возможно, потому, что я не использую перо или раскадровку. - person jk7; 31.01.2016
comment
Это работает только в том случае, если вы создаете подкласс UITableViewController. - person Wallace; 07.10.2016

Это должно помочь

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return [tableView rowHeight];
}
person Yogesh D    schedule 07.01.2010
comment
я думаю ты имеешь в виду return [self sectionHeaderHeight]; - person TMB; 05.12.2011
comment
@TMB [self sectionHeaderHeight]; выдает ошибку. Вы имели в виду [tableView sectionHeaderHeight];? - person jk7; 31.01.2016