ios 8 的自动布局中的全宽错误约束(适用于 ios 7)

Full width bug constraint in auto layout for ios 8 (works in ios 7)

我有一个蓝色的 (在屏幕截图上) UIView,我想使用故事板在自动布局中将其设置为全宽。

我的设置在 iOS 7 上完美运行,但在 iOS 8 上运行不佳。

当我 println(blueView.frame.size) 在 iOS 7 上时,我得到正确的数字:320 点宽度。但是在 iOS 8 上,我得到 600 点宽度,与使用 wAny hAny 布局时 Storyboard 中定义的相同 600。

println 在这里完成:

override func viewDidLoad() {
    super.viewDidLoad()
    //Some stuff
    println(blueView.frame.size)
}

这是我到目前为止所做的:

我还觉得奇怪的是,我对其他元素(UILabel、UIImageView)应用了相同类型的约束,它们在 iOS 7 和 8 上正常工作。只是 UIViews 不起作用正确。

控制台中没有 auto-layout 警告。

更新:这是视觉问题

疯狂的是,这种行为是可以预料的,具体取决于您 println 声明的时机。

在 iOS 7 中,蓝色视图将首次以 320 点宽进行布局,假设其容器视图最终将获得该宽度。然而,在具有适应性的 iOS 8 中,从故事板创建的视图不再做出该假设;相反,视图是使用故事板的 canvas 大小 600x600pts 实例化的。稍后会在第一个运行时自动布局过程中调整视图的大小,以便为您的应用程序的 window 和视图控制器层次结构提供正确的宽度。

我希望如果您的 println 语句出现在 -awakeFromNib-viewDidLoad 中,您将看到这个初始 600pt 宽度。但是,如果您将其移动到 -viewDidLayoutSubviews-viewDidAppear:,您会看到与 运行 使用的任何设备的 window 宽度相匹配的宽度。