9

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

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

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

约束字符串如下所示:

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

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

4

4 回答 4

5

Check out my detailed answer to this question here: https://stackoverflow.com/a/18746930/796419

It takes a bit of work to set up, but you can absolutely have Auto Layout constraints driving a completely dynamic table view without a single hardcoded height (and let the constraint solver do the heavy lifting and provide you with the row height).

于 2013-10-10T08:10:26.617 回答
2

自动布局对单元格高度没有帮助。您需要将其设置为tableView:heightForRowAtIndexPath. 我想您可能会问这个问题,因为您的单元格高度是可变的,而不是固定的。即,它们取决于内容。

要解决这个问题,请预先计算单元格高度并将它们存储在数组中。返回方法中适当的indexPathtableView:heightForRowAtIndexPath

确保在主线程上计算内容大小,使用sizeThatFitsUILabel等。

如果您的计算量很大,则main除了与视图相关的方法(例如sizeThatFits.

于 2013-07-11T16:07:49.853 回答
0

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

于 2013-11-27T12:32:50.203 回答
0

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

  • 分配和实现dataSource和delegate
  • 分配UITableViewAutomaticDimension给 rowHeight 和estimatedRowHeight
  • 实现委托/数据源方法(即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(& 换行模式 = 截断尾部)
  • 设置关于其超级视图/单元格容器的所有约束(顶部、底部、左右)。
  • 可选:设置标签的最小高度,如果你想要标签覆盖的最小垂直区域,即使没有数据。

在此处输入图像描述

于 2017-10-24T09:41:37.723 回答