我需要更新一个约束的值,在一个 UITableViewCell
这应该会触发单元格的大小调整。我需要知道正确的框架,然后才能更新约束的值,但是在我的代码里有 layoutSubviews()
不调整单元格的大小。附有约束的子视图会增长,但单元格保持相同的初始高度,从而切断了视图。
我的演示设置非常简单,我有一个单一的 UIView
钉在电池的边缘。contentView
并为其添加一个高度约束。我希望当视图的高度约束被改变时,单元格能够调整大小。
override func layoutSubviews() {
super.layoutSubviews()
heightConstraint.constant = 500
}
有什么办法可以解决这个问题吗?
在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
}