【问题标题】:UITableView contentSize zero after [UIViewController updateViewConstraints] is called调用 [UIViewController updateViewConstraints] 后 UITableView contentSize 为零
【发布时间】:2014-09-03 22:53:11
【问题描述】:
在将项目转换为使用自动布局的过程中,我正在处理一个问题,即 UITableView 的 contentSize 最初设置正确,但在父 UITableViewController 的 -updateViewConstraints 之后被调用时,contentSize 为零。
App[36457:60b] -- viewWillAppear in (KRTestTableViewController) 被调用!
App[36457:60b] -- viewWillLayoutSubviews (KRTestTableViewController): 内容大小 = (320.0, 611.0), inset=(64.0, 93.0), offset=(-64.0), layout guides=(64.0, 93.0)
App[36457:60b] -- viewDidLayoutSubviews (KRTestTableViewController): 内容大小 = (320.0, 611.0), inset=(64.0, 93.0), offset=(-64.0), layout guides=(64.0, 93.0)
App[36457:60b] **** updateConstraints 调用(KRTestTableViewCell)
App[36457:60b] **** updateViewConstraints 在 (KRTestTableViewController) 中调用。内容大小高度=(611.0), contentOffset = -64.0, inset=(64.0, 93.0)
App[36457:60b] 在调用 [super updateViewConstraints] 之前,KRTestTableViewController.view.needsUpdateConstraints = 1
App[36457:60b] 调用 [super updateViewConstraints] 后,KRTestTableViewController.view.needsUpdateConstraints = 0
App[36457:60b] -- viewWillLayoutSubviews (KRTestTableViewController): 内容大小 = (0.0, 0.0), inset=(64.0, 93.0), offset=(-64.0), layout guides=(64.0, 93.0)
App[36457:60b] -- viewDidLayoutSubviews (KRTestTableViewController): 内容大小 = (0.0, 0.0), inset=(64.0, 93.0), offset=(-64.0), layout guides=(64.0, 93.0)
App[36457:60b] -- viewDidAppear in (KRTestTableViewController) 被调用!
我已将问题缩小到在更新约束后将内容大小设置为零。
关于可能导致此问题或如何解决此问题的任何想法?
这是正常的预期顺序:查看布局,然后更新约束,再次查看布局?
【问题讨论】:
-
由于未知的原因,在 -viewDidAppear 中调用 [tableView begin/endUpdates] 或空的 [tableView reloadRowsAtIndexPaths:nil ...] 会在视图控制器中触发 -viewWill/DidLayoutSubviews,然后生成正确的 -contentSize。把它放在-viewWillAppear 中不会。
标签:
ios
uitableview
uiscrollview
autolayout