例如,我使用此代码更改名为Propo
的{{1}}的框架位置:
self.Propo.frame.origin.x -= self.view.frame.width
(Propo
在Storyboard中有约束)
但是,当应用视图消失并重新出现时,UIView
会将自身重置为原始位置。我该怎么做才能解决它?当我以编程方式更改它时,我希望UIView
保持其位置。
我已尝试updateViewConstraints()
添加任何其他内容......
答案 0 :(得分:3)
约束和手动帧操作直接冲突。你必须选择其中一个。你应该#34;促进"您希望通过Ctrl键将其作为故事板中的@IBOutlet拖动到视图控制器中的约束。然后,你可以操纵它的常量:
class MyViewController: UIViewController {
@IBOutlet weak var myPropoLeftEdgeConstraint: NSLayoutConstraint!
@IBAction doChangePropo(sender: AnyObject) {
myPropoLeftEdgeConstraint.constant -= view.frame.width
view.layoutIfNeeded()
}
}
在很多地方已经在Objective C中介绍过了,所以如果你能阅读这些例子,只需在代码中以编程方式更改代码中的NSLayoutConstraint。
How to edit constraint in code
(编辑以使其更加适用:通常,约束应该是动画的,以获得干净的用户体验。否则,眼睛会感到困惑。)
您可以通过将view.layoutIfneeded
封装在UIView.animateWithDuration(duration) { ... }
块中,轻松地为约束调整设置动画。