У меня есть UITableView с ячейками, содержащими UILabels с переменной высотой. Я могу вычислить минимальную высоту, которую должна использовать метка sizeWithFont:constrainedToSize:lineBreakMode:
, которая отлично работает при первом загрузке таблицы. Когда я поворачиваю представление таблицы, ячейки становятся более широкими (это означает, что для отображения содержимого требуется меньше строк). Есть ли способ, которым я могу иметь высоту ячеек, переопределенную UITableView во время анимации изменения ориентации или непосредственно до или после? Спасибо.
Изменение высоты UITableViewCell при изменении ориентации
Ответ 1
Ваш UITableViewController может реализовать метод tableView:heightForRowAtIndexPath:
, чтобы указать высоту строки для определенной строки, и он может посмотреть текущую ориентацию ([[UIDevice currentDevice] orientation]
), чтобы решить, какую высоту вернуть.
Чтобы убедиться, что tableView:heightForRowAtIndexPath:
снова вызван при изменении ориентации, вам, вероятно, понадобится
определить изменение ориентации, как описано в этот вопрос, и вызвать [tableView reloadData]
.
Ответ 2
Чтобы немного улучшить приведенный выше ответ от @David и ответить на последний комментарий о том, как плавно анимировать его во время вращения, используйте этот метод:
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
и, конечно, метод делегата высоты:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
return 171.0f;
} else {
return 128.0f;
}
}