我有一个UITableView
,其中包含以下数据源方法:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let identifier = "MyCellID"
let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath)
as! MyCustomCell
cell.setNeedsLayout()
cell.layoutIfNeeded()
cell.setNeedsLayout()
cell.layoutIfNeeded()
return cell
}
在我的子表格视图单元格中,我重写layoutSubviews()
,如下所示:
class MyCustomCell: UITableViewCell {
override func layoutSubviews() {
super.layoutSubviews()
print("Cell did layout its subviews.")
}
}
当表视图通过调用数据源上的tableView(_:cellForRowAt:)
来请求新的可重用单元时,控制台中的日志输出仅为
Cell did layout its subviews.
该单元格。
我的理解是,在任何视图上调用setNeedsLayout()
都会使该视图的布局无效,并且调用layoutIfNeeded()
会触发布局传递 - 即调用layoutSubviews()
- 当且仅当布局无效。因此,调用两个方法
setNeedsLayout()
layoutIfNeeded()
应始终导致layoutSubviews()
来电。我在这里推理的错误是什么?