在旋转iPad时,视图控制器不会一直延伸到右侧
当我在iPad 8.4上旋转我的视图控制器时,我的视图不会一直延伸到右侧:
在这个例子中,红色视图是我的根视图控制器,它永远不可见。 我embedded了一个使用UIViewController遏制的导航控制器,这应该填满整个屏幕,并覆盖红色的部分。
为什么会导致这种行为,我该如何解决?
如果我尝试在iPhone或iOS 9上运行,它是固定的。
我能够用最less量的步骤重现问题:
重现问题的步骤(或者尝试这个GitHub项目 ):
- 在Xcode 7中创build一个新项目。
- 将目标更改为iOS 8.4。
- 在故事板中删除视图控制器的视图,然后重新添加它。
- 更改视图控制器的背景颜色,以便我们可以看到发生了什么。
- 将视图控制器embedded到导航控制器中。
- 将一个导航项添加到视图控制器。
- 通过将UIView拖入故事板来添加中心导航项目视图。
- 添加第二个视图作为刚创build的视图的子视图。
- 添加一个新的视图控制器的故事板,并将其设置为初始视图控制器。
- 在新视图控制器的视图中执行加载方法, 使用自动布局embedded导航控制器 。
- 在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
变体,但是,如果删除了视图 (而不是视图控制器 ),那么将视图拖回到视图控制器中,将使用flexibleMax...
变体。) - 不要使用UIViewController遏制。
- 如果你使用UIViewController遏制,让故事板embedded视图控制器。
- 如果以编程方式使用UIViewController包含,则确保
translatesAutoresizingMaskIntoConstraints
设置为YES
而不是NO
。 如果比较embedded视图控制器的自动布局方式与embedded视图控制器的情节串联方式,则会看到故事板设置了translatesAutoresizingMaskIntoConstraints=YES
,因此,不要尝试设置约束,只需将translatesAutoresizingMaskIntoConstraints设置为YES ,并设置childView.frame = parentView.bounds
,模仿故事板embedded行为。 (请注意,您还可以看到,默认情节autoresize
将embedded式视图的autoresize
设置为W+H
,所以您应该确保您的视图具有该设置。)