为什么iOS 8讨厌我的AutoLayout,但iOS 9喜欢它?

时间:2016-07-07 16:18:56

标签: ios swift

我正在初始化一个视图infoScreen并将其添加为屏幕的子视图,其底部,左侧和右侧约束设置如下:

let left = NSLayoutConstraint(item: infoScreen, attribute: .Left, relatedBy: .Equal, toItem: view, attribute: .LeftMargin, multiplier: 1, constant: 0)
let right = NSLayoutConstraint(item: infoScreen, attribute: .Right, relatedBy: .Equal, toItem: view, attribute: .RightMargin, multiplier: 1, constant: 0)

var yConstraint: NSLayoutConstraint!
if (point.y < halfOfScreen) {
    yConstraint = NSLayoutConstraint(item: infoScreen, attribute: .Top, relatedBy: .Equal, toItem: highlightedView, attribute: .CenterY, multiplier: 1, constant: radius + stalkLength)
}
else {
    // This gets called the first time round.
    yConstraint = NSLayoutConstraint(item: infoScreen, attribute: .Bottom, relatedBy: .Equal, toItem: highlightedView, attribute: .CenterY, multiplier: 1, constant: -radius - stalkLength)
}

view.addConstraints([left, right, yConstraint])

以及它的高度设定。

点击infoScreen内的按钮后,我正在呼叫infoScreen.removeFromSuperview()

然后使用相同的函数重新初始化具有不同参数的infoScreen,并将其添加到屏幕。但是,这次它的顶部约束设置而不是底部约束。

在iOS 9中,这种方法非常有效,但在iOS 8中,它的作用就好像仍然设置了底部约束并弄乱了视图。如果我运行代码以便它永远不会设置底部约束(基本上跳过初始化函数的第一次运行),那么它在iOS 8中工作正常。可能导致这种情况?

0 个答案:

没有答案