Snapkit:将多个限制为边距

TRG*_*TRG 5 autolayout swift swift3 snapkit

我正在使用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)
}
Run Code Online (Sandbox Code Playgroud)

这基本上导致子视图填充父视图,除了由父视图布局边距定义的少量填充外,我敢肯定这种变化很普遍。

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

make.edges.equalToSuperview()
make.top.left.right.equalToSuperview()
Run Code Online (Sandbox Code Playgroud)

但是,我在他们的文档中没有找到关于边距的上述两种辅助方法。

我正在寻找的(如果存在)类似于以下内容:

make.edges.equalToSuperview().withMargins()
make.top.left.right.equalToSuperview().withMargins()
make.top.left.right.equalTo(someview).withMargins()
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*inM 9

你尝试过这样的事情吗?

subView.snp.makeConstraints { make in
    make.edges.equalTo(view.snp.margins)
}
Run Code Online (Sandbox Code Playgroud)

评论后编辑:

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

subView.snp.makeConstraints { make in
    make.top.leading.equalTo(view).inset(view.layoutMargins)
}
Run Code Online (Sandbox Code Playgroud)

要么

subView.snp.makeConstraints { make in
    make.top.leading.equalTo(view.layoutMarginsGuide)
Run Code Online (Sandbox Code Playgroud)

要么

subView.snp.makeConstraints { make in
    make.top.leading.equalTo(view.safeAreaLayoutGuide)
Run Code Online (Sandbox Code Playgroud)