约束的故事板共享常量

Storyboard shared constants for constraints

有什么方法可以在故事板中的约束之间共享常量(或者更好的是全局定义它们并在需要时使用)?

比如说,我希望与顶部的距离等于与左侧的距离 - 这些无法通过设置任何对称性来实现,我不想每次都更改它们,只是换一个看看效果

我想要一个故事板(可点击)解决方案,无需编码。

如果没有更多信息很难说,但我认为最好的解决方案是子类化 UIView,如下所示:

SWIFT 4.0

class MySymmetricView {
    @IBInspectable var inset: Float = 10.0 // Put your constraints here, @IBInspectable will expose them to IB, you can also set your constants here

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupConstraints()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupConstraints()
    }

    func setupConstraints() {
         NSLayoutConstraint(item: self, attribute: .leading, relatedBy: .equal, toItem: superview, attribute: .leadingMargin, multiplier: 1.0, constant: inset).isActive = true
         NSLayoutConstraint(item: self, attribute: .top, relatedBy: .equal, toItem: superview, attribute: .leadingMargin, multiplier: 1.0, constant: inset).isActive = true
    }

}

或者以类似的方式对约束本身进行子类化。

嗯,您不能在故事板中使用定义的常量,但可以共享属性。根据您的设计的复杂程度,可能不值得这么麻烦。如果您只想在两个项目之间共享相同的距离,您最好编辑它们的值。如果您有多个依赖项,您可以创建共享相同大小的“间隔符”。

这很简单,只需将两个或更多(隐藏的)UIView 对象添加到您的情节提要中即可。选择一个作为主项,然后将其他项设置为具有该项的大小属性。可以将母版设置为具有 1:1 的比例,这样您只需设置和更改它的高度即可在 X 和 Y 中调整所有它们的大小。然后将其他项目与这些对象对齐。

另请注意,乘数可以有除 1:1 以外的其他值。

另请注意:如果您只想定位一个视图,一个这样的隐藏视图就足够了。