【问题标题】:Update storyboard constraint using code使用代码更新情节提要约束
【发布时间】:2015-08-21 06:16:46
【问题描述】:

我的代码中有一个UIImage,我想在按下按钮时垂直放大。 UIImage 在情节提要中完全受限,我想在按下按钮时更改其高度。

我已经在代码中链接了UIImage 及其高度约束:

    @IBOutlet weak var botBotCons: NSLayoutConstraint!
    @IBOutlet weak var botBot: UIImageView!

然后

@IBAction func testButton(sender: UIBarButtonItem) {
    println("testButton pressed")
    self.botBotCons.constant = 68   //or +=62 as its current constant is 6
    self.view.layoutIfNeeded()
}

我在控制台中收到 testButtonpressed 消息,但图像没有调整大小。我究竟做错了什么?我是否也需要更改情节提要中的某些内容?

【问题讨论】:

  • 首先尝试将这些行添加到函数 self.view.setNeedsUpdateConstraints() self.view.updateConstraints() 的末尾。如果它不起作用,可能是 imageView 被其他约束阻止了,想在故事板中看到你的约束
  • 非常感谢。我添加了这两行代码。它没有用。比我第十一次去storyboard中检查我的约束,我终于发现图像的顶部被6约束到视图的底部。我将约束更改为图像的底部到底部视图中,空间 = 0。现在一切正常。我感到惭愧。无论如何,非常感谢。
  • 您是否还有其他可能与较大高度发生冲突的布局约束?控制台日志中是否有任何关于打破约束的输出?我已经建立了一个新的单视图应用程序项目,添加了一个图像视图和一个按钮,添加了约束,为高度约束拖动了一个出口,将高度约束的常量设置为按钮的操作方法和高度确实会发生变化,而无需调用任何“布局”或“需要”方法。

标签: ios swift uistoryboard


【解决方案1】:

您应该在动画块中调用layoutIfNeeded。苹果实际上建议你在动画块之前调用一次,以确保所有待处理的布局操作都已完成。我刚刚通过调整按钮大小检查了它 - 一切正常。

@IBOutlet weak var myBtn: UIButton!
@IBOutlet weak var btnHeight: NSLayoutConstraint!
@IBOutlet weak var btnWidth: NSLayoutConstraint!


@IBAction func resizeBtn(sender: AnyObject) {
    self.myBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0)

    self.view.layoutIfNeeded()
    self.btnHeight.constant += 50
    self.btnWidth.constant += 50

    UIView.animateWithDuration(0.7, animations: {
        self.view.layoutIfNeeded()
    })
}

附:确保其他约束不会阻止您的更改。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2018-09-29
    • 2016-11-16
    • 2015-04-20
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2015-05-29
    相关资源
    最近更新 更多