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

例如,我使用这段代码来改变名为PropoUIView的框架位置:

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

Propo在Storyboard中有约束)

但是,当应用程序视图消失并重新出现时, UIView会将其自身重置为原来的位置。 我该如何解决呢? 我想让UIView保持其位置,当我改变它的编程。

我已经尝试updateViewConstraints()的东西附加…

约束和手动框架操纵直接冲突。 你必须select一个或另一个。 您应该改为通过Ctrl-拖动到您的视图控制器作为一个@IBOutlet在故事板中的约束,你想改变。 然后,你可以操纵它的常量:

 class MyViewController: UIViewController { @IBOutlet weak var myPropoLeftEdgeConstraint: NSLayoutConstraint! @IBAction doChangePropo(sender: AnyObject) { myPropoLeftEdgeConstraint.constant -= view.frame.width view.layoutIfNeeded() } } 

Objective-C已经在很多地方介绍了这一点,所以如果你可以阅读这些例子,只要在代码中进行search就可以更改代码中的NSLayoutConstraint。

如何在代码中编辑约束

(编辑以使其更加适用:通常约束条件应该是为了获得干净的用户体验而devise的,否则眼睛会感到困惑。

您可以通过在UIView.animateWithDuration(duration) { ... }块中封装view.layoutIfneeded来轻松地调整约束条件。