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

时间:2015-09-15 20:20:23

标签: ios objective-c uiview uiviewcontroller autolayout

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

enter image description here

在此示例中,红色视图是我的根视图控制器,它永远不应该可见。我嵌入了一个导航控制器using UIViewController containment,它应该填满整个屏幕并覆盖红色部分。

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

如果我尝试在iPhone或iOS 9上运行它,它就会被修复。

1 个答案:

答案 0 :(得分:0)

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

重现问题的步骤(或try this GitHub project):

  1. 在Xcode 7中创建一个新项目。
  2. 将目标更改为iOS 8.4。
  3. 删除故事板中的视图控制器视图,然后重新添加。
  4. 更改视图控制器的背景颜色,以便我们查看正在进行的操作。
  5. 将视图控制器嵌入导航控制器中。
  6. 将导航项添加到视图控制器。
  7. 通过将UIView拖入故事板来添加中心导航项视图。
  8. 添加第二个视图作为刚刚创建的视图的子视图。
  9. 将新视图控制器添加到情节提要板并将其设置为初始视图控制器。
  10. 在新视图控制器的视图中执行了加载方法embed the navigation controller using auto layout
  11. 纵向在iPad Air(8.4)上运行。
  12. 将iPad向右旋转,使其处于横向状态。
  13. 注意红色部分如何伸出视线。
  14. 解决问题的方法:

    • 使用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包含,请让storyboard嵌入视图控制器。
    • 如果您以编程方式使用UIViewController包含,请确保translatesAutoresizingMaskIntoConstraints设置为YES而不是NO。如果您比较auto layout way of embedding a view controller与故事板嵌入视图控制器的方式,您将看到故事板设置translatesAutoresizingMaskIntoConstraints=YES,因此,不要尝试设置约束,只需将translatesAutoresizingMaskIntoConstraints设置为YES,并设置childView.frame = parentView.bounds,以模仿故事板嵌入行为。 (注意,您还可以看到,默认情况下,情节提要会将嵌入视图的autoresize设置为W+H,因此您应确保您的视图具有该设置。)
相关问题