2015-02-07 18 views
5

Tôi tạo ô tùy chỉnh với 2 nhãn nhiều dòng và ghim nhãn này vào tất cả các cạnh. Khi ở trong -tableView:heightForRowAtIndexPath: cho iOS> = 8 Tôi trả lại UITableViewAutomaticDimension. Nhưng khi xem bảng xuất hiện chiều cao ô là lớn hơn nên được. Sau khi tôi di chuyển xuống và sau đó di chuyển lên các tế bào có chiều cao bình thường. Cách khắc phục hành vi này?Chiều cao UITableViewCell sai với UITableViewAutomaticDimension

Mã cho height:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) { 
     return UITableViewAutomaticDimension; 
    } 

    static CCTopicTableViewCell *cell; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     cell = [tableView dequeueReusableCellWithIdentifier:@"topicCellIdentifier"]; 
    }); 
    cell.topic = [self.topics topicAtIndexPath:indexPath]; 

    cell.bounds = CGRectMake(0, 0, CGRectGetWidth(self.tableView.bounds), CGRectGetHeight(cell.bounds)); 

    [cell setNeedsLayout]; 
    [cell layoutIfNeeded]; 

    CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    return size.height + 1; 
} 

Và kết quả:

Sau khi di chuyển:

Trả lời

9

Vấn đề đã biến mất khi tôi không đặt ước tính của bảngViewRowHeight dành cho iOS 8 và cập nhật preferredMaxLayoutWidth mỗi khi thiết lập văn bản cho nhãn multiline

+0

Cảm ơn, điều này đã khắc phục được sự cố của tôi. Không chắc tôi hiểu tại sao nó sửa chữa nó nhưng tôi chắc chắn sau khi nghiên cứu thêm về chủ đề Nó sẽ đến với tôi. Cảm ơn một lần nữa! –

+0

Bất kỳ ý tưởng nào _why_ hoạt động này? –

1

Automatic dimension không hoạt động tốt đối với một số UILabel nếu nhãn được liên kết với nhãn khác nhau bằng cách mép trên hoặc cạnh đáy. Chỉ cần chắc chắn rằng bạn không có sự sắp xếp như vậy.

2

Đặt chiều tự động trong viewDidLoad() phương pháp hoặc viewWillAppear() (cả hai mã trong cùng một vị trí)

tableView.rowHeight = UITableViewAutomaticDimension; 
    tableView.estimatedRowHeight = 160.0;//(Maximum Height that should be assigned to your cell) 

Visit Using Auto Layout in UITableView for dynamic cell layouts & variable row heights một hướng dẫn trực quan cho cả iOS 7 và iOS 8

2

tôi giải quyết vấn đề này bằng cách thiết lập "text" tài sản của nhãn multiline để "nil":

override func prepareForReuse() { 
    _label.text = nil 
} 

Cũng properies bảng "estimatedRowHeight" và "rowHeight" nên được đặt một cách chính xác :

_tableView.estimatedRowHeight = 44 
_tableView.rowHeight = UITableViewAutomaticDimension 
+0

Tuyệt vời! Làm việc hoàn hảo (iOS9) – Chris

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