首页 > 解决方案 > 更新 UITableViewCell 的 layoutSubviews() 内的约束

问题描述

我需要更新 a 内的约束值UITableViewCell,这应该会触发单元格的大小调整。在更新约束值之前,我需要知道正确的帧,但是将代码放在里面layoutSubviews()并不会调整单元格的大小。附加了约束的子视图会增长,但单元格保持相同的初始高度,从而切断视图。

出于演示的目的,我的设置非常简单,我UIView在单元格的边缘固定了contentView一个,并添加了一个高度约束。我希望当视图的高度约束发生变化时单元格会调整大小。

override func layoutSubviews() {
    super.layoutSubviews()

    heightConstraint.constant = 500
}

关于为什么这不起作用的任何想法?

标签: iosswiftuitableviewautolayout

解决方案


改变单元格高度有几个怪癖layoutSubviews()

通常,当单元格修改其内部布局(约束等)时,单元格必须告诉表格视图重绘自身。

在您的情况下,在表格视图确定单元格的高度之后layoutSubviews(),将调用单元格。

如果你真的需要这样做,有几种方法可以解决这个问题layoutSubviews()

1 - 调用 relaodData()viewDidAppear()

2 - 强制里面的单元格布局cellForRowAt

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyCell
    // set your cell properties here as usual - labels, images, etc...
    cell.setNeedsLayout()
    cell.layoutIfNeeded()
    return cell
}

推荐阅读