Ios 调用[UIViewController updateViewConstraints]后的UITableView内容大小为零

Ios 调用[UIViewController updateViewConstraints]后的UITableView内容大小为零,ios,uitableview,uiscrollview,autolayout,Ios,Uitableview,Uiscrollview,Autolayout,在将项目转换为使用自动布局的过程中,我正在处理一个问题,即UITableView的contentSize最初设置正确,但在调用父UITableViewController的-updateViewConstraints后,contentSize为零 App[36457:60b] -- viewWillAppear in (KRTestTableViewController) Called! App[36457:60b] -- viewWillLayoutSubviews (KRTestTable

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

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! 应用程序[36457:60b]--视图将出现在(KRTestTableViewController)调用中! 应用程序[36457:60b]--ViewWillLayoutSubView(KRTestTableViewController):内容大小=(320.0611.0),插入=(64.093.0),偏移=(-64.0),布局指南=(64.093.0) 应用程序[36457:60b]--viewDidLayoutSubviews(KRTestTableViewController):内容大小=(320.0611.0),插入=(64.093.0),偏移=(-64.0),布局指南=(64.093.0) App[36457:60b]**updateConstraints调用(KRTestTableViewCell) 应用程序[36457:60b]****调用了updateViewConstraints(KRTestTableViewController)。内容大小高度=(611.0),内容偏移=-64.0,插入=(64.0,93.0) 应用程序[36457:60b]在调用[super updateViewConstraints]之前,KRTestTableViewController.view.needsUpdateConstraints=1 应用程序[36457:60b]调用[super updateViewConstraints]后,KRTestTableViewController.view.needsUpdateConstraints=0 应用程序[36457:60b]--ViewWillLayoutSubView(KRTestTableViewController):内容大小=(0.0,0.0),插入=(64.0,93.0),偏移量=(-64.0),布局指南=(64.0,93.0) 应用程序[36457:60b]--viewDidLayoutSubviews(KRTestTableViewController):内容大小=(0.0,0.0),插入=(64.0,93.0),偏移量=(-64.0),布局指南=(64.0,93.0) 应用程序[36457:60b]--ViewDid出现在(KRTestTableViewController)调用中! 我已将问题缩小到更新约束后内容大小设置为零。

有什么想法可以导致这种情况或如何解决它吗?

这是否是正常的预期顺序:查看布局,然后更新约束,然后再次查看布局?

发现了根本原因!
topLayoutGuide
UITableViewController
存在错误,如果调用
topLayoutGuide
UITableView
contentSize
将设置为零!数小时的bug搜索是由一个非常不必要的调试日志语句输出
topLayoutGuide
=_+

我之前关于调用
reloadRowsAtIndexPaths:nil…
修复
contentSize
的评论仍然纠正了
contentSize
。我已将其(带零检查)放置在
viewDidLayoutSubviews
中,以防出现需要
topLayoutGuide
的情况


请参阅此处的同一问题:

由于未知原因,在
-viewdidispect
中调用
[tableView begin/endUpdates]
或空的
[tableView reloadrowsatinexpaths:nil…]
触发视图控制器中的
-viewWill/DidLayoutSubviews
,然后生成正确的
-contentSize
。将其放入
-视图将出现
,而不会出现。