我正在初始化一个视图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中工作正常。可能导致这种情况?