快速约束不要旋转之后

时间:2015-07-06 21:58:47

标签: ios swift uiview uibutton nslayoutconstraint

我在代码中以编程方式创建UIButton,并将其约束到ViewController的顶部和右侧。加载ViewController后,UIButton位于屏幕上的正确位置。当我旋转设备时,问题出现了,似乎没有采取任何约束。以下是我用来创建UIButton的代码:

let xValue = UIScreen.mainScreen().bounds.width - 44
let closeButton = UIButton(frame: CGRect(origin: CGPoint(x: xValue, y: 0), size: CGSize(width: 44, height: 44)))

closeButton.setImage(UIImage(named: "close"), forState: .Normal)
closeButton.addTarget(self, action: "closeClicked", forControlEvents:.TouchUpInside)

self.view.addSubview(closeButton)

self.view.addConstraint(NSLayoutConstraint(item: closeButton, attribute: .Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: closeButton, attribute: .Right, relatedBy: .Equal, toItem: self.view, attribute: .Right, multiplier: 1, constant: 0))

我还需要做些什么来确保在方向更改后应用约束吗?

2 个答案:

答案 0 :(得分:2)

你不应该将frames与约束结合起来。默认情况下,iOS会将您的帧转换为约束,这会导致与您设置的约束冲突。创建按钮后,您需要致电:

对于Swift 1.2:

closeButton.setTranslatesAutoresizingMaskIntoConstraints(false)

对于Swift 2.0:

closeButton.translatesAutoresizingMaskIntoConstraints = false

这样iOS就不会尝试将您的帧转换为约束。然后,您需要为按钮的宽度和高度添加两个附加约束:

closeButton.addConstraint(NSLayoutConstraint(item: closeButton, attribute: .Width,
  relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 44))

closeButton.addConstraint(NSLayoutConstraint(item: closeButton, attribute: .Height,
  relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 44))

由于您的按钮不再使用该框架,您可以使用以下方式创建它:

let closeButton = UIButton()

现在,您的按钮将在所有设备的所有方向上粘贴在屏幕的右上角。

答案 1 :(得分:0)

所有你需要的是在segue上禁用动画(取消选中" Animation"复选框),然后不需要更新约束。 在编辑故事板时可以在右侧面板中的Segue选项中找到。