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

时间:2015-01-18 23:31:23

标签: ios iphone uiview storyboard autolayout

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

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

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

println在这里完成:

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

这是我迄今为止所做的事情:

Blue UIView to set to full width Constraint of the UIView

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

控制台中没有自动布局警告。

更新:这是视觉问题

iOS7 vs iOS8

1 个答案:

答案 0 :(得分:4)

疯狂,可以预期这种行为,具体取决于println声明的时间。

在iOS 7中,蓝色视图将首次以320点宽度布局,假设其容器视图最终将获得该宽度。然而,在具有适应性的iOS 8中,从故事板创建的视图不再具有这种假设;相反,视图是使用storyboard的画布大小600x600pts实例化的。稍后在第一个运行时自动布局传递期间调整视图的大小,以使应用程序的窗口和视图控制器层次结构具有正确的宽度。

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