用于约束的 Storyboard 共享常量
Posted
技术标签:
【中文标题】用于约束的 Storyboard 共享常量【英文标题】:Storyboard shared constants for constraints 【发布时间】:2018-02-14 10:38:56 【问题描述】:有没有办法在故事板中的约束之间共享常量(或者更好的是全局定义它们并在需要时使用)?
说,我希望与顶部的距离等于与左侧的距离 - 通过设置任何类型的对称性都无法实现,我不想每次都更改它们,只需更改一个看看结果。
我想要一个故事板(可点击)解决方案,无需编码。
【问题讨论】:
请详细说明您的要求。 已编辑。投反对票时,请说明你的理由 - 否则我不会从这个过程中学到任何东西。 您能否向我们展示您尝试过的示例,以及为什么这不起作用? 嗯,到目前为止,我只是浏览了 XCode UI,因为我想要一个 XIB 解决方案,而不是编写任何新类,因为我想要一些通用和通用的东西 当然我浏览了谷歌和 SO,但在我看来,SO 不是寻找 ios 答案的最佳地点 【参考方案1】:好吧,您不能在情节提要中使用已定义的常量,但可以共享属性。根据您的设计的复杂程度,它可能不值得麻烦。如果您只想在两个项目之间共享相同的距离,则最好编辑它们的值。如果您有多个依赖项,您可以创建共享相同大小的“间隔”。
这很简单,只需在情节提要中添加两个或更多(隐藏的)UIView
对象。选择一个作为主项,然后将其他项设置为具有该大小属性。 master 可以设置为 1:1 的比例,因此您只需要设置和更改它的高度即可在 X 和 Y 中调整所有它们的大小。然后将其他项目与这些对象对齐。
另请注意,乘数可以使用 1:1 以外的其他值。
另一个注意事项:如果您只想定位一个视图,则一个这样的隐藏视图就足够了。
【讨论】:
好吧,更好的是我可以只使用一个隐藏视图并更改其宽度。这仍然很有启发性,因为我不知道约束不可能共享属性(如果我理解正确的话)。 您介意相应地编辑您的问题,以便我接受吗? 不确定我是否理解。你想让我改变什么? 啊...再次从我这边说得不够清楚,对不起 - 我的意思是 我 编辑你的问题,但你也可以这样做。随心所欲。 谢谢。我只是添加了我寻求的最简单的案例描述【参考方案2】:没有更多信息很难说,但我认为最好的解决方案是继承 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
或以类似的方式对约束本身进行子类化。
【讨论】:
这不是很笼统和笼统的(虽然我知道你写答案时我没有具体说明)以上是关于用于约束的 Storyboard 共享常量的主要内容,如果未能解决你的问题,请参考以下文章
如何将 AutoLayout 约束的常量设置为超级视图的百分比?