Я перегружаю метод делегата -tableView:heightForRowAtIndexPath:
и использую -sizeWithFont:constrainedToSize:
, чтобы программно установить высоту ячейки, основываясь на тексте в этой ячейке:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.section) {
case(kAboutViewOverviewSection): {
switch (indexPath.row) {
case(kAboutViewOverviewSectionRow): {
NSString *text = NSLocalizedString(@"kAboutViewOverviewSectionFieldText", @"");
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(280, 500)];
return s.height + 13;
}
default: {
break;
}
}
break;
}
default: {
break;
}
}
return 44.0;
}
Это работает, когда таблица впервые нарисована. Однако при изменении ориентации устройства с книжного на альбомный высота ячейки не изменяется.
Я попытался переопределить метод -shouldAutorotateToInterfaceOrientation:
в контроллере табличного представления:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
return YES;
}
Это должно перезагрузить данные таблицы и (предположительно) перерисовать представления ячейки таблицы. Но это не имеет никакого эффекта.
Есть ли способ заставить ячейку перерисовываться с новой высотой, когда устройство поворачивается?
РЕДАКТИРОВАТЬ : я пробовал следующее, безрезультатно:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
}
Вот как выглядит приложение в портретной ориентации:
Вот как выглядит приложение в альбомной ориентации:
Между верхним и нижним краями содержимого есть пробел.
РЕДАКТИРОВАТЬ 2 :
Настройка параметра размера с помощью ширины фрейма таблицы помогла решить эту проблему:
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width,500)];