在Swift中在运行时更改Autolayout约束的UIView框架

时间:2016-08-28 16:32:10

标签: ios swift uiview autolayout

例如,我使用此代码更改名为Propo的{​​{1}}的框架位置:

        self.Propo.frame.origin.x -= self.view.frame.width

Propo在Storyboard中有约束)

但是,当应用视图消失并重新出现时,UIView会将自身重置为原始位置。我该怎么做才能解决它?当我以编程方式更改它时,我希望UIView保持其位置。

我已尝试updateViewConstraints()添加任何其他内容......

1 个答案:

答案 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) { ... }块中,轻松地为约束调整设置动画。