在旋转iPad时,视图控制器不会一直延伸到右侧

当我在iPad 8.4上旋转我的视图控制器时,我的视图不会一直延伸到右侧:

在这里输入图像说明

在这个例子中,红色视图是我的根视图控制器,它永远不可见。 我embedded了一个使用UIViewController遏制的导航控制器,这应该填满整个屏幕,并覆盖红色的部分。

为什么会导致这种行为,我该如何解决?

如果我尝试在iPhone或iOS 9上运行,它是固定的。

我能够用最less量的步骤重现问题:

重现问题的步骤(或者尝试这个GitHub项目 ):

  1. 在Xcode 7中创build一个新项目。
  2. 将目标更改为iOS 8.4。
  3. 在故事板中删除视图控制器的视图,然后重新添加它。
  4. 更改视图控制器的背景颜色,以便我们可以看到发生了什么。
  5. 将视图控制器embedded到导航控制器中。
  6. 将一个导航项添加到视图控制器。
  7. 通过将UIView拖入故事板来添加中心导航项目视图。
  8. 添加第二个视图作为刚创build的视图的子视图。
  9. 添加一个新的视图控制器的故事板,并将其设置为初始视图控制器。
  10. 在新视图控制器的视图中执行加载方法, 使用自动布局embedded导航控制器 。
  11. 在iPad Air(8.4)上纵向运行。
  12. 将iPad向右旋转,使其处于横向。
  13. 注意红色部分如何突出视野。

事情解决它:

  • 使用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 ,所以您应该确保您的视图具有该设置。)