Ios 是否可以更改约束';通过interface builder从超类获取的常量值?

Ios 是否可以更改约束';通过interface builder从超类获取的常量值?,ios,swift,xcode,Ios,Swift,Xcode,我尝试在以以下方式设置约束值之后缩放约束值: @IBDesignable class ScaledConstraint: NSLayoutConstraint { @IBInspectable var constantValue: CGFloat = 0 { didSet { constantValueDidSet() } } func constantValueDidSet() { super.constant = (constantValue / 320)

我尝试在以以下方式设置约束值之后缩放约束值:

@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变量?提前谢谢

您可以将约束从情节提要导出到视图控制器中,这与导出UIView和其他视图组件的方式类似,尽管自行获取导出会有点麻烦。(答案会告诉你怎么做)

因此,您的其中一个销售点如下所示:

@IBOutlet weak var myConstraint: NSLayoutConstraint!
您可以稍后致电:

myConstraint.constant = 100 //Or whatever value you want
之后,您应确保致电:

view.layoutIfNeed()

您可以将约束从情节提要导出到视图控制器中,这与导出UIView和其他视图组件的方式类似,尽管自行获取导出会有点烦人。(答案会告诉你怎么做)

因此,您的其中一个销售点如下所示:

@IBOutlet weak var myConstraint: NSLayoutConstraint!
您可以稍后致电:

myConstraint.constant = 100 //Or whatever value you want
之后,您应确保致电:

view.layoutIfNeed()

也许你应该对你的约束使用乘数?@AlexandrKolesnik我认为这不是我的情况,因为几乎不可能在不花费大量时间的情况下为每个约束计算正确的乘数。也许你应该对你的约束使用乘数?@AlexandrKolesnik我认为这不是我的情况,因为几乎不可能正确计算在不花费大量时间的情况下为每个约束增加乘数不幸的是,这不是我问题的答案。@ColdeMembrace我想这是真的,但最终你可以用这种方法实现你的目标。您可以通过编程方式计算所需的约束值,并在此处进行设置,而无需子类化NSLayoutConstraint。您保存的常量值可以保存在视图/视图控制器中。是的,我知道,但以编程方式计算约束值不是我的情况,我只需要脚本解决方案即可this@coldembrace但这不是您的实现选择吗?您可以访问这两种解决方案,当然由您决定使用哪种解决方案。但其中一个会起作用,另一个显然给你带来了问题。不,不是,我只是在问另一个只使用故事板的解决方案。不幸的是,这不是我问题的答案。@ColdeMembrace我想这是真的,但最终你可以用这种方法实现你的目标。您可以通过编程方式计算所需的约束值,并在此处进行设置,而无需子类化NSLayoutConstraint。您保存的常量值可以保存在视图/视图控制器中。是的,我知道,但以编程方式计算约束值不是我的情况,我只需要脚本解决方案即可this@coldembrace但这不是您的实现选择吗?您可以访问这两种解决方案,当然由您决定使用哪种解决方案。但其中一个会起作用,另一个显然给你带来了问题。不,不是,我是在问另一个只使用故事板的解决方案