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
。将其放入-视图将出现
,而不会出现。