例如,我使用此代码更改名为 Propo
的 UIView
的框架位置:
self.Propo.frame.origin.x -= self.view.frame.width
(Propo
在 Storyboard 中有约束)
但是当应用 View 消失并重新出现时,UIView
会将自身重置到其原始位置。我该怎么做才能解决它?我希望 UIView
在我以编程方式更改它时保持其位置。
我已经通过任何其他方式尝试了 updateViewConstraints()
...
最佳答案
约束和手动帧操作是直接冲突的。你必须选择一个或另一个。您应该改为“提升”您希望更改的约束,方法是按住 Ctrl 键将其作为 Storyboard 中的 @IBOutlet 拖动到您的 View Controller 。然后,您可以操纵它的常量:
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) { ... }
block 中轻松地为约束调整设置动画。
关于ios - 在运行时在 Swift 中更改受自动布局约束的 UIView 的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39193445/