Я перегружать метод делегата -tableView:heightForRowAtIndexPath:
и используя -sizeWithFont:constrainedToSize:
программно установить высоту ячейки, на основе текста в этой ячейке:Сброс пользовательских UITableViewCell высоты при iPhone повернут
- (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;
}
Это должно перезагружать данные таблицы и (предположительно) перерисовывать мнения ячеек таблицы. Но это не имеет никакого эффекта.
Есть ли способ заставить ячейку перерисовать с новой высотой, когда устройство повернуто?
EDIT: Я попытался следующие, никакого эффекта:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
}
Вот что приложение выглядит как в портретной ориентации:
Вот что приложение выглядит как в альбомной ориентации:
Промежуток между верхним и нижним краями содержимого.
РЕДАКТИРОВАТЬ 2:
Регулировка параметра размера с помощью ширины таблицы фрейма помогло устранить эту проблему отображения:
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width,500)];
Я попытался -reloadData. –
Я попытался -reloadSections: withRowAnimation: в -shouldAutorotateToInterfaceOrientation: метод, и это тоже не сработает. –
Все они работают, если вызваны после изменения размера представления. Это означает, что они должны быть в вашем didRotateFromInterfaceOrientation: – rpetrich