2010-04-27 46 views
11

Tôi có UITableView với các ô có chứa UILabels có chiều cao thay đổi. Tôi có thể tính chiều cao tối thiểu mà nhãn cần phải sử dụng sizeWithFont:constrainedToSize:lineBreakMode:, hoạt động tốt khi lần xem bảng được tải lần đầu tiên. Khi tôi xoay chế độ xem bảng, các ô trở nên rộng hơn (nghĩa là có ít dòng hơn được yêu cầu để hiển thị nội dung). Có cách nào tôi có thể có chiều cao của các tế bào được xác định lại bởi UITableView trong hoạt ảnh thay đổi định hướng hay ngay trước hoặc sau? Cảm ơn bạn.Thay đổi Chiều cao UITableViewCell về Thay đổi Định hướng

+0

Làm thế nào để bạn có được kích thước (chiều rộng) được sử dụng cho sizeWithFont: constrainedToSize: lineBreakMode:? Tôi đang cố gắng tạo ra một ô có chiều cao thay đổi để làm việc cho phong cách tableview đơn giản và theo nhóm, nhưng không thể tìm ra cách để có được chiều rộng của tableview được nhóm theo số – flagg19

Trả lời

13

UITableViewController của bạn có thể triển khai phương pháp tableView:heightForRowAtIndexPath: để xác định chiều cao hàng cho một hàng cụ thể và có thể xem hướng hiện tại ([[UIDevice currentDevice] orientation]) để quyết định chiều cao cần trả về.

Để đảm bảo tableView:heightForRowAtIndexPath: được gọi một lần nữa khi những thay đổi định hướng, có thể bạn sẽ cần phải phát hiện sự thay đổi định hướng như mô tả trong this question, và gọi [tableView reloadData].

+0

Vâng, đây là những gì tôi muốn làm. –

+0

Tôi hiện đang có 'tableView: heightForRowAtIndexPath:' được triển khai, tôi không thấy nó được gọi trên thay đổi hướng nhưng nó được gọi là 'reloadData' và tôi có thể phát hiện sự thay đổi định hướng. Nếu có thể tôi muốn có độ cao animate khi chế độ xem quay, nhưng tôi không thấy đó là khả năng. –

+3

Theo câu hỏi này: http://stackoverflow.com/questions/460014/can-you-animate-a-height-change-on-a-uitableviewcell-when-selected bạn có thể thực hiện hoạt ảnh bằng cách sử dụng ' beginUpdates'/'endUpdates' thay vì' reloadData' –

11

Để cải thiện một chút về câu trả lời trên từ @ David và để trả lời bình luận cuối cùng về làm thế nào để animate nó trơn tru trong một luân chuyển, sử dụng phương pháp này:

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} 

và tất nhiên các phương pháp chiều cao đại biểu:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) { 
     return 171.0f; 
    } else { 
     return 128.0f; 
    } 
} 
+0

Cảm ơn! Tôi đã phát điên! Bất kỳ ý tưởng tại sao statusBarOrientation hoạt động và định hướng một mình không khi bạn lần đầu tiên khởi tạo ứng dụng? Khi chạy, và hướng thay đổi, cả hai đều hoạt động tốt. – Jan

+0

Định hướng UIDevice và định hướng UIInterface (từ thanh trạng thái) không giống nhau. UIDevice có thể ở trong UIDeviceOrientationFaceUp (tức là iPad của bạn đang ngồi trên bàn) - không cho bạn biết định hướng của giao diện là gì, có thể là gì trong số 4. – bandejapaisa

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