我有一个蓝色(在屏幕截图上) 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)
}
这是我迄今为止所做的事情:
我也觉得奇怪的是,我对其他元素(UILabel,UIImageView)应用了相同类型的约束,它们在iOS 7和8上正常工作。只是UIViews无法正常工作。
控制台中没有自动布局警告。
更新:这是视觉问题
答案 0 :(得分:4)
疯狂,可以预期这种行为,具体取决于println
声明的时间。
在iOS 7中,蓝色视图将首次以320点宽度布局,假设其容器视图最终将获得该宽度。然而,在具有适应性的iOS 8中,从故事板创建的视图不再具有这种假设;相反,视图是使用storyboard的画布大小600x600pts实例化的。稍后在第一个运行时自动布局传递期间调整视图的大小,以使应用程序的窗口和视图控制器层次结构具有正确的宽度。
我希望如果println
语句出现在-awakeFromNib
或-viewDidLoad
中,您会看到这个初始的600pt宽度。但是,如果您要将其移至-viewDidLayoutSubviews
或-viewDidAppear:
,您会看到与您正在运行的任何设备的窗口宽度相匹配的宽度。