首页 > 解决方案 > 是否可以通过接口生成器从超类更改约束的常量值?

问题描述

在以这种方式设置约束后,我试图缩放约束的值:

@IBDesignable
class ScaledConstraint: NSLayoutConstraint {
    @IBInspectable var constantValue: CGFloat = 0 { didSet { constantValueDidSet() } }

    func constantValueDidSet() {
        super.constant = (constantValue / 320) * UIScreen.main.bounds.width
    }
}

但是这种方法迫使我为每个约束更改 IBInspectable 变量。我试图处理它覆盖默认常量值,但它仅在我从代码中设置常量值时才有效,并且当我从界面构建器设置它时不起作用:

override var constant: CGFloat {
        set(newValue) {
            self.constant = (newValue / 320) * UIScreen.main.bounds.width
        }
        get {
            return self.constant
        }
    }

有没有办法在没有自定义 IBInspectable 变量的情况下从界面构建器设置常量值后更改常量值?提前致谢!

标签: iosswiftxcode

解决方案


您可以将故事板中的约束输出到您的视图控制器中,类似于您输出 UIView 和其他视图组件的方式,即使获取它自己的输出会更烦人。(这里的答案向您展示了如何做到这一点)。

所以你的一个网点看起来像这样:

@IBOutlet weak var myConstraint: NSLayoutConstraint!

您可以稍后调用:

myConstraint.constant = 100 //Or whatever value you want

之后,您应该确保致电:

view.layoutIfNeed()

推荐阅读