UITableViewCell 和 layoutSubviews 中的设置子视图框架第一次不起作用

Posted

技术标签:

【中文标题】UITableViewCell 和 layoutSubviews 中的设置子视图框架第一次不起作用【英文标题】:UITableViewCell and setting subview frames in layoutSubviews doesn't work first time 【发布时间】:2014-07-10 16:51:24 【问题描述】:

我在故事板中有一个原型 UITableViewCell 子类,它使用自动布局(但单元格本身没有任何使用自动布局的元素)。我正在尝试在其 layoutSubviews 方法中手动设置子视图的框架,但这仅在重用单元格或突出显示时才有效。第一次显示单元格时,设置子视图框架没有效果(但调用该方法并设置背景颜色和其他东西工作正常)。我有什么遗漏吗?

编辑:好吧,我的行为是错误的,似乎在重用单元格时,子视图框架再次重置。

【问题讨论】:

你在设置框架后打电话给setNeedsLayout吗? 在我正在编辑的子视图上?是的,试过了。 layoutIfNeeded 工作吗? 调用 layoutIfNeeded 会完全停止子视图的布局(即使选择了单元格)。也只是编辑了我的问题,因为我对行为有误。 您能否在对象浏览器打开的情况下显示在界面构建器中选择的单元格的屏幕截图? 【参考方案1】:

如果要强制单元格调用 layoutSubviews 可能需要在 awakeFromNib 中使用 setNeedsLayout 和 layoutIfNeeded。

【讨论】:

以上是关于UITableViewCell 和 layoutSubviews 中的设置子视图框架第一次不起作用的主要内容,如果未能解决你的问题,请参考以下文章

用 5 种不同的布局绘制 UITableViewCell

如何在 Storyboard 中的自定义 UITableViewCell 中配置 UITableView?

如何使用自动布局定义最大宽度约束?

UILabel 宽度和自动布局的困难

突出显示的 UITableViewCell 和选定的 UITableViewCell 有啥区别?

Autolayout,如何解决这些约束错误