Высота по умолчанию для заголовка раздела в 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;
}

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 в своем табличном представлении, это должно вам сказать.


1
Спасибо ... Я жестко закодирую это под это. Хотя я бы хотел, чтобы это значение было постоянным.
Rein

3
У вас это наоборот. UITableViewStyleGrouped22 года и UITableViewStylePlain10 лет.
Михаил Гринич

25

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

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return kFirstSectionHeaderHeight;
    return [self sectionHeaderHeight];
}

2
Я думаю , что вы имели в виду return [self.tableView sectionHeaderHeight];, или еще лучше, return [tableView sectionHeaderHeight];. Однако оба возвращают для меня -1, возможно, потому, что я не использую перо или раскадровку.
jk7

7

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


4

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.