9

我正在使用 Snapkit 来简化我的自动布局代码,但是一个场景似乎经常弹出,我想知道是否有一种方法可以减少代码。

因此,假设我需要将 a 的边缘固定UIView到它的超级视图边距,我们可能会这样做:

subView.snp.makeConstraints { make in
    make.top.equalTo(parentView.snp.topMargin)
    make.bottom.equalTo(parentView.snp.bottomMargin)
    make.left.equalTo(parentView.snp.leftMargin)
    make.right.equalTo(parentView.snp.rightMargin)
}

这实质上会导致子视图填充父视图,除了父视图布局边距定义的少量填充。我相信这种变化是很常见的。

对于这个库来说,这似乎过于冗长。它有一些非常好的辅助方法,例如这些

make.edges.equalToSuperview()
make.top.left.right.equalToSuperview()

然而,我在他们的文档中没有找到的是如何执行上述两种与边距相关的辅助方法。

我正在寻找的(如果存在)类似于:

make.edges.equalToSuperview().withMargins()
make.top.left.right.equalToSuperview().withMargins()
make.top.left.right.equalTo(someview).withMargins()

那么,除了非常冗长的方式之外,还有其他方法吗?我是否遗漏了文档中的某些内容,或者这可以通过扩展添加?

4

2 回答 2

14

你尝试过这样的事情吗?

subView.snp.makeConstraints { make in
    make.edges.equalTo(view.snp.margins)
}

评论后编辑:

当您只想将某些边缘约束到超级视图边距时,您可以执行以下操作。

subView.snp.makeConstraints { make in
    make.top.leading.equalTo(view).inset(view.layoutMargins)
}

或者

subView.snp.makeConstraints { make in
    make.top.leading.equalTo(view.layoutMarginsGuide)

或者

subView.snp.makeConstraints { make in
    make.top.leading.equalTo(view.safeAreaLayoutGuide)
于 2017-09-08T17:59:05.260 回答
2

一种很好的方法是使用UIView.layoutMarginsGuide

childView.snp.makeConstraints { make in
    make.top.leading.bottom.equalTo(parentView.layoutMarginsGuide)
    make.trailing.equalTo(otherView.snp.leading).offset(-8.0)
}
于 2018-07-27T01:26:35.460 回答