ios - 在运行时在 Swift 中更改受自动布局约束的 UIView 的框架

标签 ios swift uiview autolayout

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

        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/

相关文章:

ios - 在 iOS 中创建随机 128 位 AES 加密 key

ios - 动态添加内容到 UIScrollView

ios - 行间距不起作用

iOS 在应用程序启动时动画 subview ?

ios - 如何通知 subview 删除的 super View

ios - 在什么情况下 drawRect 没有接收到 UIView 的完整框架?

java - Android 和 ios 中的单词库

javascript - React native - 使用表单收集的值的算术运算

iphone - html img 标签中的图像在我的 iPhone 应用程序中变得模糊

ios - 从 viewForHeaderInSection 中的 UIButton 获取数据发送到 add Target 中的方法