为啥 UITableView 的 contentLayoutGuide.layoutFrame 总是为零?

Posted

技术标签:

【中文标题】为啥 UITableView 的 contentLayoutGuide.layoutFrame 总是为零?【英文标题】:Why UITableView's contentLayoutGuide.layoutFrame always zero?为什么 UITableView 的 contentLayoutGuide.layoutFrame 总是为零? 【发布时间】:2018-04-07 18:34:25 【问题描述】:

ios 11 开始,Apple 为UIScrollView 添加了一个contentLayoutGuide,我想用表格视图的contentLayoutGuide 添加自动布局约束,但我发现contentLayoutGuidelayoutFrame 始终为 CGRect.zero ,所以它不起作用。

我想用自动布局在滚动视图内容的底部添加一个视图。这不起作用:

label.topAnchor.constraint(equalTo: tableView.contentLayoutGuide.bottomAnchor, constant: 10).isActive = true

【问题讨论】:

【参考方案1】:

我想我知道为什么UITableView 的这个值总是为零,可能是因为表格视图的子视图不是由自动布局约束布局的,它们是按框架布局的。

所以只有通过自动布局约束布局的子视图才能给contentLayoutGuide.layoutFrame 一个值。

【讨论】:

【参考方案2】:

什么时候添加这个约束?

根据Apple documentation:

在调用其所属视图的 layoutSubviews() 方法时,此属性包含一个有效的 CGRect 值。

希望对你有帮助。

【讨论】:

但是在拥有视图的 layoutSubviews() 方法被调用后它仍然返回零。 frameLayoutGuide 和 safeAreaLayoutGuide 的值是正确的,但 contentLayoutGuide 总是为零

以上是关于为啥 UITableView 的 contentLayoutGuide.layoutFrame 总是为零?的主要内容,如果未能解决你的问题,请参考以下文章

我在学习iOS的UITableView,为啥UITableView的最后一块单元格只能显示一半? [关闭]

为啥我的 UITableView 不显示数据?

为啥UITableView不能reloadData

为啥 UITableViewCell 宽度小于 UITableView 宽度

为啥删除 UITableView 行时会出现错误?

为啥滚动 UITableView 比滚动 UIScrollView 响应更快?