2016-09-13 14 views
8

CẬP NHẬTchiều cao Variable UITableViewCell mở rộng sau khi di chuyển đến cuối danh sách và xoay

Tôi biết những gì đang gây ra phá kỳ lạ này của bố cục. Đây là thiết lập của một phụ kiện (UITableViewCellAccessory). Nếu tôi ngừng chỉ định phụ kiện thì bố cục sẽ không bị vỡ. Tôi chưa thêm câu trả lời này vì câu trả lời sẽ cần một giải pháp cung cấp cho tôi phụ kiện mà không vi phạm bố cục

Hầu hết các vấn đề tôi thấy với những ô có chiều cao động tùy chỉnh là chúng không có chính xác chiều cao cho đến khi chúng được xoay. Tuy nhiên tôi thấy ngược lại: Tất cả các ô là chiều cao hợp lệ cho nội dung động của chúng. Cuộn lên và xuống không phá vỡ điều này. Tuy nhiên nếu tôi cuộn xuống cuối danh sách, sau đó xoay thiết bị, sau đó xoay lại một hàng sẽ trở thành từ 0,5 đến 1,5 lần chiều cao của màn hình.

Xoay vòng tiếp theo hoặc cuộn tiếp theo sẽ đặt các hàng trở lại chiều cao mong đợi. Tôi đã bao gồm một vài ảnh chụp màn hình trước và sau khi

Table before scroll

Table after scroll and rotate

Các UITableView là định nghĩa như sau

this.rootChildrenTable = new UITableView() 
      { 
       TranslatesAutoresizingMaskIntoConstraints = false, 
       AccessibilityIdentifier = "rootChildrenTable", 
       RowHeight = UITableView.AutomaticDimension, 
       EstimatedRowHeight = 44.0f, 
       BackgroundColor = UIColor.GroupTableViewBackgroundColor, 
       TableFooterView = new UIView(), 
       TableHeaderView = this.searchBar, 
       KeyboardDismissMode = UIScrollViewKeyboardDismissMode.OnDrag 
      }; 

Lưu ý các nghi phạm thông thường được thiết lập RowHeightEstimatedRowHeight. Ngay sau khi tôi xóa Lines = 0 khỏi nhãn, làm cho các hàng có cùng chiều cao, vấn đề sẽ biến mất.

Bất kỳ ý tưởng nào khác tôi nên xem xét?

+0

Tôi nghĩ bạn có thể quan sát vòng quay và gọi 'beginUpdate' và' endUpdate' để cập nhật chiều cao ô – Tj3n

+0

Tôi có thể làm điều đó nhưng tôi có rất nhiều bảng chiều cao động và thường không nhận được điều này phải là một giải pháp "thích hợp" cho điều này chứ không phải là "không chắc chắn những gì đang xảy ra vì vậy hãy cập nhật chiều cao của lực lượng và tế bào" –

+0

Bạn đang sử dụng 'UITableViewController' hoặc' UITableView' bên trong 'UIViewController'? – farzadshbfn

Trả lời

1

Tôi đã gặp phải vấn đề tương tự trong dự án của mình. Tôi đã khắc phục điều đó bằng cách sau để thiết lập chiều cao cho hàng.

//calculate the height by this way 
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return self.heightForBasicCell(at: indexPath) 
    } 


    func heightForBasicCell(at indexPath: IndexPath) -> CGFloat { 
     var sizingCell: YourCell? = nil 
     var onceToken: dispatch_once_t 
     dispatch_once(onceToken, {() -> Void in 
      sizingCell = tableView.dequeueReusableCell(withIdentifier: YourCell.cellIdentifier())! 
     }) 
     self.configureBasicCell(sizingCell, at: indexPath) 
     return self.calculateHeight(forConfiguredSizingCell: sizingCell) 
    } 

    func calculateHeight(forConfiguredSizingCell sizingCell: YourCell) -> CGFloat { 
     sizingCell!.bounds = CGRect(x: 0.0, y: 0.0, width: CGRectGetWidth(tableView.frame), height: CGRectGetHeight(sizingCell!.bounds)) 
     sizingCell!.setNeedsLayout() 
     sizingCell!.layoutIfNeeded() 
     var size = sizingCell!.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 
     return size.height + 1.0 
     // Add 1.0f for the cell separator height 
    } 

    func configureBasicCell(_ cell: YourCell, at indexPath: IndexPath) { 
//set your text here 
    cell(“text”) 
    } 

Thay đổi mã theo nhu cầu của bạn. Tôi vừa chuyển đổi mã mục tiêu C thành nhanh chóng.

+0

Tôi không cần tính toán chiều cao "bằng tay". Tôi không làm điều này bất cứ nơi nào khác trong ứng dụng của chúng tôi. –

+0

Bạn chính xác. bạn không tính chiều cao bằng tay. Tôi đoán bạn đang sử dụng bố trí tự động, Trong tế bào dựa trên chiều dài văn bản thiết lập với ô nhãn nên tăng chiều cao của họ phải không? Cho rằng bạn phải tính theo cách trên. Hãy thử một lần Nó sẽ hoạt động. – Vishnuvardhan

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