有没有办法在故事板中的约束之间共享常量(或者更好地在全局中定义它们并在需要时使用)?
说,我希望距离顶部的距离等于左边的距离 - 这些是通过设置任何对称性无法实现的,我不想每次都改变它们,只需更换一个并看到结果。
我想要一个故事板(可点击)解决方案,无需编码。
答案 0 :(得分:1)
嗯,您不能在故事板中使用已定义的常量,但可以共享属性。根据您的设计有多复杂,可能不值得麻烦。如果您只想在两个项目之间共享相同的距离,那么最好编辑它们的值。如果你有几个依赖关系,你可以创建" spacers"它们的大小相同。
这很简单,只需在故事板中添加两个或更多(隐藏)UIView
个对象即可。选择一个作为主项目,然后将其他项目设置为具有该项目的大小属性。主设备可以设置为1:1的比例,因此您只需设置和更改它的高度即可在X和Y中调整所有设置的大小。然后将其他项目与这些对象对齐。
另请注意,乘数可以使用除1:1之外的其他值。
另一个注意事项:如果您只想定位一个视图,那么一个隐藏视图就足够了。
答案 1 :(得分:0)
没有更多信息很难说,但我认为最好的解决方案是将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
}
}
或者以类似的方式对约束本身进行子类化。