2009-05-16 31 views
5

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:

Portait

Dưới đây là những gì các ứng dụng trông giống như trong hướng ngang:

Landscape

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)]; 

Trả lời

6

Đó là ít hơn tối ưu, nhưng là giải pháp đơn giản nhất là gọi -reloadData trên bàn.

Một giải pháp tốt hơn là nên gọi -beginUpdates, -deleteRowsAtIndexPaths:withRowAnimation:, -insertRowsAtIndexPaths:withRowAnimation:, và -endUpdates hoặc đơn giản là -reloadSections:withRowAnimation: nếu nhắm mục tiêu 3,0 chỉ. Thao tác này sẽ thêm hoạt ảnh.

Edit: Và bạn cũng sẽ cần một hợp tableView:heightForRowAtIndexPath:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    CGSize textSize = [[self textForRowAtIndexPath:indexPath] sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width - 20, 500)]; 
    return textSize.height + 13.0f; 
} 

(nơi textForRowAtIndexPath: là một phương thức trả về văn bản của tế bào)

+0

tôi đã cố gắng -reloadData. –

+0

Tôi đã thử -reloadSections: withRowAnimation: trong phương thức -shouldAutorotateToInterfaceOrientation: và điều này cũng không hoạt động. –

+0

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

Các vấn đề liên quan