奇怪的 UIContainerView 自动布局旋转行为

Posted

技术标签:

【中文标题】奇怪的 UIContainerView 自动布局旋转行为【英文标题】:Strange UIContainerView autolayout rotation behavior 【发布时间】:2013-09-12 01:47:40 【问题描述】:

我有一个视图控制器,它由两个子 UIContainerViews 组成,其中一个是固定宽度,另一个根据纵向和横向模式动态调整其宽度。两者都包含UITableViews。

由于某种原因,如果屏幕以纵向加载,它会很好地呈现。但是,如果它以横向加载,然后 旋转 到纵向,则第二个(动态)表会变得很糟糕,并认为它比它应该/应该更宽,让你水平滚动它应该 没有在做。

tableView 的所有单元格大小都合适,并粘在这个“太宽”的 tableView 的左侧。但是,如果我将 tableview 的背景涂成粉红色,我可以看到整个东西都延伸到了这个太宽的区域。

这让我很困惑。无论视图控制器加载为哪个方向,自动布局不应该相同吗?

如果我在 viewDidRotate... 处理程序中记录宽度,一切似乎都具有正确的宽度,但它仍然以这种奇怪的方式呈现。

我是否可以强制容器视图自行重新布局?

更新: 是 tableView 的 contentSize 搞砸了。记录时所有其他宽度都是正确的,但 contentSize.width 是错误的。好消息是我可以手动将其设置回应有的状态,并且一切正常!然而,它并没有回答为什么它首先发生或我做错了什么(如果有的话)的问题。

截图如下:

【问题讨论】:

【参考方案1】:

为了强制UITableView(重新)计算其内容大小,您可以使用layoutIfNeeded 方法。它遍历视图层次结构并立即布置子视图,因此内容大小设置正确。

不要手动设置大小,而是为您的表格视图调用此方法。

【讨论】:

以上是关于奇怪的 UIContainerView 自动布局旋转行为的主要内容,如果未能解决你的问题,请参考以下文章

在代码中设置自动布局约束时出现奇怪的问题

iOS 8 中的嵌套 CollectionView、自动布局和旋转

如何在工具栏中自动布局项目

UIContainerView 内容高度(内嵌 UITableViewController)

相同的自动布局约束在纵向和横向中表现不同

UIContainerView 中的 ChildViewController 在初始加载时高度错误