在UITableViewCell的layoutSubviews()中更新约束。

问题描述 投票:0回答:1

我需要更新一个约束的值,在一个 UITableViewCell这应该会触发单元格的大小调整。我需要知道正确的框架,然后才能更新约束的值,但是在我的代码里有 layoutSubviews() 不调整单元格的大小。附有约束的子视图会增长,但单元格保持相同的初始高度,从而切断了视图。

我的演示设置非常简单,我有一个单一的 UIView 钉在电池的边缘。contentView并为其添加一个高度约束。我希望当视图的高度约束被改变时,单元格能够调整大小。

override func layoutSubviews() {
    super.layoutSubviews()

    heightConstraint.constant = 500
}

有什么办法可以解决这个问题吗?

ios swift uitableview autolayout
1个回答
0
投票

在UITableViewCell中改变单元格的高度有一些怪癖。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
}
© www.soinside.com 2019 - 2024. All rights reserved.