2009-07-29 4 views
108

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

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

    return someDefaultHeight; 
} 

Благодаря

+0

, который должен работать – Daniel

+0

, почему бы вам не попробовать разные значения, пока вы getone, что вы довольны? – Daniel

+4

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

ответ

185

В IOS 5.0 и далее вы можете вернуть UITableViewAutomaticDimension в большинстве методов делегата. Ее в нижней части страницы документации

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    if(section == CUSTOM_SECTION) 
    { 
     return CUSTOM_VALUE; 
    } 
    return UITableViewAutomaticDimension; 
} 
+1

hmm .. Что касается меня, 'UITableViewAutomaticDimension' возвращает' -1' (hardcoded const), и я не вижу никаких разделов вообще в своем 'UITableView'. – skywinder

+0

почему 'UITableViewAutomaticDimension' показывает -1, когда' NSLog' это? – S1U

+26

Это работает только в том случае, если вы используете: '- (NSString *) tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) раздел', если вы используете таблицу таблиц '- (UIView *) tableView: (UITableView *) tableView viewForHeaderInSection: (NSInteger), этот метод не работает. – SuperSaiyen

46

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

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

+1

Спасибо ... Я буду жестко подписать это. Хотя я действительно хотел, чтобы для этой ценности была константа. – rein

+3

У вас есть эти обратные. 'UITableViewStyleGrouped' равно 22, а' UITableViewStylePlain' равно 10. –

+2

Нет, он прав; plain is 22. – pt2ph8

-1

Это должно сделать трюк

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(indexPath.section == CUSTOM_SECTION) 
    { 
     return CUSTOM_VALUE; 
    } 
    return [tableView rowHeight]; 
} 
+0

Я думаю, вы имеете в виду 'return [self sectionHeaderHeight];' – TMB

+0

@TMB '[self sectionHeaderHeight];' создает ошибку. Вы имели в виду '[tableView sectionHeaderHeight];'? – jk7

24

На самом деле сделать трюк :)

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

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

2

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

5

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

2

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

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

    return [super tableView:tableView heightForHeaderInSection:section]; 
} 
+0

'[super tableView: tableView heightForHeaderInSection: section];' возвращает 0 для меня, возможно потому, что я не использую ниб или раскадровку. – jk7

+0

Это работает только в том случае, если вы подклассифицируете UITableViewController. – Wallace

Смежные вопросы