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

125

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

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

    return someDefaultHeight;
}

Спасибо

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

Ответы:

204

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

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return UITableViewAutomaticDimension;
}
Ajaxharg
источник
1
хм .. Что касается меня UITableViewAutomaticDimensionвозвратов -1(жестко запрограммированная const), и я не вижу никаких разделов в моем файле UITableView.
Skywinder
почему UITableViewAutomaticDimensionпоказывает -1 когда NSLogэто?
S1U
30
Это работает только тогда, когда вы используете область: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionесли вы реализуете - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionметод, это не сработает.
SuperSaiyen
2
Стоит отметить, что если вы реализуете это и метод делегата оценки и вернете UITableViewAutomaticDimension он будет иметь нулевую высоту.
Сэм Соффс,
4
@SuperSaiyen - Он действительно работает, viewForHeaderInSectionвам просто нужно установитьestimatedSectionHeaderHeight
Роберт
48

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

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

paulthenerd
источник
1
Спасибо ... Я жестко закодирую это под это. Хотя я бы хотел, чтобы это значение было постоянным.
Rein
3
У вас это наоборот. UITableViewStyleGrouped22 года и UITableViewStylePlain10 лет.
Михаил Гринич
25

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

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

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

ronhippler
источник
4

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

Muvimotv
источник
2

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

Джейсон Джордж
источник
2

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

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

    return [super tableView:tableView heightForHeaderInSection:section];
}
Хендрик
источник
[super tableView:tableView heightForHeaderInSection:section];возвращает мне 0, возможно, потому что я не использую перо или раскадровку.
jk7
1
Это работает, только если вы создаете подкласс UITableViewController.
Уоллес
-1

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return [tableView rowHeight];
}
Йогеш Д
источник
я думаю вы имеете в видуreturn [self sectionHeaderHeight];
TMB
@TMB [self sectionHeaderHeight];выдает ошибку. Вы имели в виду [tableView sectionHeaderHeight];?
jk7