【问题标题】:Changing an Autolayout-constrained UIView's frame at runtime in Swift在 Swift 运行时更改自动布局约束的 UIView 的框架
【发布时间】:2016-08-28 16:32:09
【问题描述】:

例如,我使用此代码更改名为 PropoUIView 的框架位置:

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

Propo 在情节提要中有限制)

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

我已经尝试过 updateViewConstraints() 附加任何其他内容...

【问题讨论】:

  • 如果视图有约束,永远不要改变框架!

标签: ios swift uiview autolayout


【解决方案1】:

约束和手动框架操作直接冲突。你必须选择其中之一。相反,您应该通过 Ctrl 将其作为 Storyboard 中的 @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) { ... } 块中来轻松地为约束调整设置动画。

【讨论】:

  • 谢谢 BaseZen!
猜你喜欢
  • 1970-01-01
  • 2014-01-27
  • 2021-01-14
  • 1970-01-01
  • 2016-08-06
  • 2017-12-24
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多