Tôi đang quá tải phương pháp đại biểu -tableView:heightForRowAtIndexPath:
và sử dụng -sizeWithFont:constrainedToSize:
để lập trình thiết lập chiều cao của tế bào, căn cứ vào văn bản trong ô đó:Reset tùy chỉnh UITableViewCell chiều cao khi quay 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;
}
này hoạt động khi bàn được rút ra lần đầu tiên. Tuy nhiên, khi tôi thay đổi hướng của thiết bị, từ chiều dọc sang ngang, chiều cao của ô không thay đổi.
tôi đã cố gắng trọng phương pháp -shouldAutorotateToInterfaceOrientation:
trong điều khiển điểm bàn của tôi:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
return YES;
}
này nên tải lại dữ liệu bảng và (có lẽ) vẽ lại các quan điểm ô trong bảng. Nhưng điều này không có hiệu lực.
Có cách nào để buộc một ô vẽ lại với chiều cao mới, khi thiết bị được xoay?
EDIT: Tôi đã thử những điều sau đây, để không ảnh hưởng gì:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
}
Dưới đây là những gì các ứng dụng trông giống như trong hướng dọc:
Dưới đây là những gì các ứng dụng trông giống như trong hướng ngang:
Có khoảng cách giữa các cạnh trên và dưới của nội dung.
EDIT 2:
Điều chỉnh thông số kích thước thông qua chiều rộng khung bảng đã giúp khắc phục vấn đề màn hình này:
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width,500)];
tôi đã cố gắng -reloadData. –
Tôi đã thử -reloadSections: withRowAnimation: trong phương thức -shouldAutorotateToInterfaceOrientation: và điều này cũng không hoạt động. –
Tất cả các công việc này được gọi sau khi chế độ xem đã được thay đổi kích thước. Điều đó có nghĩa là họ phải ở trong didRotateFromInterfaceOrientation của bạn: – rpetrich