繁体   English   中英

iOS自动布局:表格视图单元格的动态高度

[英]iOS Auto-Layout: Dynamic height for table view cell

我有一个包含一堆单元格的表视图(自定义单元格,只有其内容视图)。

tableView:cellForRowAtIndexPath:我将预定义的UIView(有几个子视图)添加到自定义单元格的内容视图中。 我之前为UIView及其子视图设置了所有约束。

最后但并非最不重要的是,我为自定义单元格(superview)的内容视图和之前添加的UIView(子视图)设置了垂直和水平约束。

约束字符串如下所示:

    H:|[view]|
    V:|[view]|

不幸的是,我仍然获得所有表视图单元格的默认高度。 我想知道是否有办法让自动布局根据内容大小自动计算高度。

在这里查看我对这个问题的详细答案: https//stackoverflow.com/a/18746930/796419

设置需要一些工作,但是您可以完全使用自动布局约束来驱动完全动态的表视图而不需要单个硬编码高度(并且让约束求解器完成繁重的工作并为您提供行高)。

自动布局无助于单元格高度。 您需要在tableView:heightForRowAtIndexPath设置它。 我想你可能会问这个因为你的细胞高度是可变的,而不是固定的。 即,它们取决于内容。

要解决此问题,请预先计算单元格高度并将其存储在数组中。 返回tableView:heightForRowAtIndexPath方法中相应indexPath的值。

一定要使用UILabel类的sizeThatFits等计算主线程的内容大小。

如果您的计算是密集的,除了与视图相关的方法(如sizeThatFits之外,请将其中的大部分工作放在main

我通过使用CGSize size = [view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];解决了这个问题CGSize size = [view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; tableView:heightForRowAtIndexPath: .

要设置行高的自动尺寸,请确保执行以下步骤,自动尺寸对单元格/行高度布局有效。

  • 分配和实现dataSource和委托
  • UITableViewAutomaticDimension分配给rowHeight和estimatedRowHeight
  • 实现delegate / dataSource方法(即heightForRowAt并向其返回值UITableViewAutomaticDimension

迅速:

@IBOutlet weak var table: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Don't forget to set dataSource and delegate for table
    table.dataSource = self
    table.delegate = self

    // Set automatic dimensions for row height
    // Swift 4.2 onwards
    table.rowHeight = UITableView.automaticDimension
    table.estimatedRowHeight = UITableView.automaticDimension


    // Swift 4.1 and below
    table.rowHeight = UITableViewAutomaticDimension
    table.estimatedRowHeight = UITableViewAutomaticDimension

}



// UITableViewAutomaticDimension calculates height of label contents/text
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    // Swift 4.2 onwards
    return UITableView.automaticDimension

    // Swift 4.1 and below
    return UITableViewAutomaticDimension
}

对于UITableviewCell中的标签实例

  • 设置行数= 0(&换行模式=截断尾部)
  • 设置相对于其superview / cell容器的所有约束(顶部,底部,右侧)。
  • 可选 :如果您希望标签覆盖最小垂直区域,即使没有数据,也可以设置标签的最小高度。

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM