Изменение высоты UITableViewCell при изменении ориентации - PullRequest
11 голосов
/ 27 апреля 2010

У меня есть UITableView с ячейками, содержащими переменную высоту UILabels. Я могу рассчитать минимальную высоту, которую должна использовать метка sizeWithFont:constrainedToSize:lineBreakMode:, которая прекрасно работает при первой загрузке представления таблицы. Когда я поворачиваю табличное представление, ячейки становятся шире (это означает, что для отображения содержимого требуется меньше строк). Можно ли как-нибудь изменить высоту ячеек с помощью UITableView во время анимации изменения ориентации или непосредственно перед или после? Спасибо.

Ответы [ 2 ]

13 голосов
/ 27 апреля 2010

Ваш UITableViewController может реализовать метод tableView:heightForRowAtIndexPath:, чтобы указать высоту строки для конкретной строки, и он может посмотреть текущую ориентацию ([[UIDevice currentDevice] orientation]), чтобы решить, какую высоту возвращать.

Чтобы снова вызывать tableView:heightForRowAtIndexPath: при изменении ориентации, вам, вероятно, потребуется обнаружите изменение ориентации, как описано в этом вопросе , и позвоните [tableView reloadData].

12 голосов
/ 17 марта 2013

Чтобы немного улучшить ответ выше от @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;
    }
}
...