ios - 更新 UITableViewCell 的 layoutSubviews() 内的约束
问题描述
我需要更新 a 内的约束值UITableViewCell
,这应该会触发单元格的大小调整。在更新约束值之前,我需要知道正确的帧,但是将代码放在里面layoutSubviews()
并不会调整单元格的大小。附加了约束的子视图会增长,但单元格保持相同的初始高度,从而切断视图。
出于演示的目的,我的设置非常简单,我UIView
在单元格的边缘固定了contentView
一个,并添加了一个高度约束。我希望当视图的高度约束发生变化时单元格会调整大小。
override func layoutSubviews() {
super.layoutSubviews()
heightConstraint.constant = 500
}
关于为什么这不起作用的任何想法?
解决方案
改变单元格高度有几个怪癖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
}
推荐阅读
- html - 如果单击 iframe 中的任何链接,为什么 iframe 的 src 属性不会更改?
- angular - 带有辅助按钮的 mat-nav-list
- ssl - SSL 实现 oracle apex
- php - 无法从 php 中的 curl 调用中获取数组元素的值
- mysql - 带有自定义函数结果的 mysql concat_ws 阻止了像 '%str%' 这样的工作
- android - android 删除 ACRA 后找不到符号类 RequiresApi
- python - 如何使用 `with` 语句来抑制 `sys.stdout` 或 `sys.stderr`?
- angular - 如果在构造函数处注入服务,TypeScript 编译器将无法识别接口
- r - R 在 RFE(递归特征消除)中使用我自己的模型来选择重要特征
- xml - xml 编辑导入到 indesign 的工作流程打破了布局