用于约束的 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 约束的常量设置为超级视图的百分比?

将 Storyboard 和 xib 用于同一个视图控制器?

如何在 xib 文件中为约束设置常量

storyBoard升级版 -在代码中使用约束

iOS Storyboard约束详解

我应该如何通过 Storyboard 为我的 iOS 视图设置自动布局/约束?