【问题标题】:Update constraint inside layoutSubviews() of UITableViewCell更新 UITableViewCell 的 layoutSubviews() 内的约束
【发布时间】:2020-09-30 19:27:16
【问题描述】:
我需要更新UITableViewCell 中的约束值,这应该会触发单元格的大小调整。在更新约束值之前,我需要知道正确的帧,但是将我的代码放在layoutSubviews() 中不会调整单元格的大小。附加约束的子视图会增长,但单元格保持相同的初始高度,从而切断视图。
出于演示目的,我的设置非常简单,我在单元格的contentView 的边缘固定了一个UIView,并添加了一个高度限制。我希望当视图的高度约束改变时单元格会调整大小。
override func layoutSubviews() {
super.layoutSubviews()
heightConstraint.constant = 500
}
关于为什么这不起作用的任何想法?
【问题讨论】:
标签:
ios
swift
uitableview
autolayout
【解决方案1】:
layoutSubviews() 中的单元格高度有几个变化。
通常,当单元格修改其内部布局(约束等)时,单元格必须告诉表格视图重绘自身。
在您的情况下,单元格的layoutSubviews() 在表格视图确定单元格的高度之后被调用。
解决这个问题的几种方法,如果你真的需要在layoutSubviews():
1 - 在viewDidAppear() 中调用 relaodData()
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
}