【问题标题】:Full width bug constraint in auto layout for ios 8 (works in ios 7)ios 8 自动布局中的全宽错误约束(适用于 ios 7)
【发布时间】:2015-03-16 22:50:42
【问题描述】:

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

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

当我在 iOS 7 上println(blueView.frame.size) 时,我得到了正确的数字: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 上都能正常工作。只是 UIView 不能正常工作。

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

更新:这是视觉问题

【问题讨论】:

  • 我不确定我是否理解 - 您的应用出了什么问题?只是记录的值是错误的吗?您在哪个方法中运行println - 您确定视图有时间预先布局吗?究竟是什么问题?最后,如果你认为你发现了一个合适的错误,请向 Apple 报告:bugreport.apple.com

标签: ios iphone uiview storyboard autolayout


【解决方案1】:

很疯狂,这种行为是可以预料到的,具体取决于您的println 语句的时间。

在 iOS 7 中,蓝色视图在第一次布局时会以 320 磅宽,假设它的容器视图最终会达到该宽度。然而,在具有适应性的 iOS 8 中,由情节提要创建的视图不再做出这种假设。相反,视图是用故事板的画布大小 600x600pts 实例化的。视图稍后会在第一次运行时自动布局传递期间调整大小,以具有适合您应用的窗口和视图控制器层次结构的正确宽度。

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

【讨论】:

  • 很好的解释!这确实解决了我的问题。非常感谢!
猜你喜欢
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多