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 宽度相匹配的宽度。
我有一个蓝色的 (在屏幕截图上) 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 宽度相匹配的宽度。