旋转 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 时,视图控制器没有一直向右延伸的主要内容,如果未能解决你的问题,请参考以下文章

iPad:在横向呈现 UIImagePickerController 会在关闭时旋转我的其他视图控制器

iPad 模态控制器在旋转后被解散

旋转设备时切换到另一个视图控制器

iPad 应用程序中的旋转

旋转 ipad 屏幕时同时调用滚动功能

当模态视图可见且 iPad 旋转时,UIPopover 的内容会更改为随机方向