调用[UIViewController updateViewConstraints]后,UITableView contentSize为零

时间:2014-09-03 22:53:11

标签: ios uitableview uiscrollview autolayout

在将项目转换为使用自动布局的过程中,我处理的问题是UITableView contentSize最初设置正确,但是调用父UITableViewController' -updateViewConstraintscontentSize为零。

App[36457:60b] -- viewWillAppear in (KRTestTableViewController) Called!

App[36457:60b] -- viewWillLayoutSubviews (KRTestTableViewController): content size = (320.0, 611.0), inset=(64.0, 93.0), offset=(-64.0), layout guides=(64.0, 93.0)
App[36457:60b] -- viewDidLayoutSubviews  (KRTestTableViewController): content size = (320.0, 611.0), inset=(64.0, 93.0), offset=(-64.0), layout guides=(64.0, 93.0)
App[36457:60b] **** updateConstraints called in (KRTestTableViewCell)
App[36457:60b] **** updateViewConstraints called in (KRTestTableViewController). content size height=(611.0), contentOffset = -64.0, inset=(64.0, 93.0)
App[36457:60b] before calling [super updateViewConstraints], KRTestTableViewController.view.needsUpdateConstraints = 1
App[36457:60b] after  calling [super updateViewConstraints], KRTestTableViewController.view.needsUpdateConstraints = 0
App[36457:60b] -- viewWillLayoutSubviews (KRTestTableViewController): content size = (0.0, 0.0), inset=(64.0, 93.0), offset=(-64.0), layout guides=(64.0, 93.0)
App[36457:60b] -- viewDidLayoutSubviews  (KRTestTableViewController): content size = (0.0, 0.0), inset=(64.0, 93.0), offset=(-64.0), layout guides=(64.0, 93.0)

App[36457:60b] -- viewDidAppear in (KRTestTableViewController) Called!

我已将问题缩小到更新约束后内容大小设置为零。

关于可能导致此问题或如何解决问题的任何想法? 这是正常的预期序列:视图布局,然后更新约束,再次查看布局?

1 个答案:

答案 0 :(得分:0)

发现根本原因! topLayoutGuideUITableViewController存在错误,如果您致电topLayoutGuide,则contentSize的{​​{1}}将设置为零!错误搜寻的时间是由一个非常不必要的调试日志语句引起的,该语句输出UITableView = _ +

的值

我之前关于致电topLayoutGuide以修复reloadRowsAtIndexPaths:nil ...的评论仍然会更正contentSize。我已经在contentSize内放置了(零检查),以防viewDidLayoutSubviews出现。

在此处查看相同的问题:Calling topLayoutGuide breaks scrolling altogether?