旋转 iPad 时,视图控制器没有一直向右延伸
Posted
技术标签:
【中文标题】旋转 iPad 时,视图控制器没有一直向右延伸【英文标题】:View controller is not extending all the way to the right when rotating iPad 【发布时间】:2015-09-15 20:20:23 【问题描述】:当我在 iPad 8.4 上旋转视图控制器时,我的视图不会一直向右延伸:
在本例中,红色视图是我的根视图控制器,它永远不可见。我嵌入了一个导航控制器using UIViewController containment,它应该会填满整个屏幕并覆盖红色部分。
为什么会导致这种行为,我该如何解决?
如果我尝试在 iPhone 或 ios 9 上运行它,它是固定的。
【问题讨论】:
你有没有调用layoutIfNeeded的旋转观察器方法?如果不试试这个。 【参考方案1】:我能够用最少的步骤重现问题:
重现问题的步骤(或try this GitHub project):
-
在 Xcode 7 中创建一个新项目。
将目标更改为 iOS 8.4。
在情节提要中删除视图控制器的视图,然后重新添加。
更改视图控制器的背景颜色,以便我们可以看到发生了什么。
将视图控制器嵌入到导航控制器中。
向视图控制器添加导航项。
通过将 UIView 拖到情节提要中来添加中心导航项视图。
添加第二个视图作为刚刚创建的视图的子视图。
向情节提要添加一个新的视图控制器并将其设置为初始视图控制器。
在新视图控制器的视图中确实加载了方法,embed the navigation controller using auto layout。
在 iPad Air (8.4) 上纵向运行。
将 iPad 向右旋转,使其处于横向状态。
注意红色部分是如何突出到视图之外的。
解决办法:
使用 iOS 9.0 使用 iPhone 代替 iPad 在导航项的中心位置不要有两个视图(单个视图也可以;但是,例如,视图内部的标签会导致这种损坏)。 打开情节提要的 XML 并将视图控制器的视图autoresizingMask
从 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
更改为 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
。 (默认情况下,当您将视图控制器拖入情节提要时,它将使用 ...Sizable
变体。但是,如果您删除 view(而不是 view 控制器 ),然后将视图拖回视图控制器,它将使用 flexibleMax...
变体。)
不要使用 UIViewController 容器。
如果您使用 UIViewController 包含,让情节提要嵌入视图控制器。
如果您确实以编程方式使用 UIViewController 包含,请确保将 translatesAutoresizingMaskIntoConstraints
设置为 YES
而不是 NO
。如果你比较 auto layout way of embedding a view controller 和 storyboard 嵌入视图控制器的方式,你会看到 storyboard 设置了translatesAutoresizingMaskIntoConstraints=YES
,因此,不要尝试设置约束,只需将 translatesAutoresizingMaskIntoConstraints 设置为 YES,然后设置 @ 987654333@,模仿故事板嵌入行为。 (注意,您还可以看到,默认情况下,故事板会将嵌入视图的 autoresize
设置为 W+H
,因此您应该确保您的视图具有该设置。)
【讨论】:
以上是关于旋转 iPad 时,视图控制器没有一直向右延伸的主要内容,如果未能解决你的问题,请参考以下文章