Висота за замовчуванням для заголовка розділу в UITableView


125

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

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

    return someDefaultHeight;
}

Дякую


чому ти не пробуєш різні значення, поки ти не отримаєш того, яким ти задоволений?
Даніель

4
@Daniel - якщо Apple коли-небудь вирішить змінити значення висоти рядка за замовчуванням, то мені потрібно переконатися, що мій додаток не жорстко кодує це значення (до деякої довільної суми). Найкраще витягувати цю інформацію з постійної, якщо вона десь оголошена.
приструнити

Відповіді:


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.

Якщо ви перевірте значення розділу властивостіHeaderHeight на перегляді таблиці, яке повинно вам повідомити.


1
Спасибі ... Я важко зашифрую це. Хоча я хочу, щоб ця величина була постійною.
приструнити

3
У вас це є назад. UITableViewStyleGroupedє 22 і UITableViewStylePlainє 10.
Майкл Гриніч

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)



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.