Swift Snapkit:将多个页边距约束到页边距

Swift Snapkit:将多个页边距约束到页边距,swift,swift3,autolayout,snapkit,Swift,Swift3,Autolayout,Snapkit,我正在使用Snapkit简化我的自动布局代码,但是有一个场景似乎经常弹出,我想知道是否有一种方法可以减少代码 假设我需要将UIView的边缘固定到它的superview边距上,我们可以这样做: subView.snp.makeConstraints { make in make.top.equalTo(parentView.snp.topMargin) make.bottom.equalTo(parentView.snp.bottomMargin) make.left.e

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

假设我需要将
UIView
的边缘固定到它的superview边距上,我们可以这样做:

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()

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

您是否尝试过类似的内容

subView.snp.makeConstraints { make in
    make.edges.equalTo(view.snp.margins)
}
评论后编辑:

如果只希望将某些边约束到superview边距,可以执行以下操作

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


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

childView.snp.makeConstraints { make in
    make.top.leading.bottom.equalTo(parentView.layoutMarginsGuide)
    make.trailing.equalTo(otherView.snp.leading).offset(-8.0)
}

这解决了一半的问题,我可以开始清理我的代码了。但这只适用于你做所有的边缘<代码>make.top.left.equalTo(view.snp.margins)不起作用,因为它们不匹配。也许我需要编写一个扩展来支持该函数,这似乎是一件非常常见的事情,所以我希望库中已经有一个更优雅的解决方案。@尝试检查编辑以了解在这种情况下可以做什么。使用
…inset时要记住的重要一点(view.layoutMargins
是基于layoutMargins的值创建一个常量。如果在创建约束后(可能在tableview中)布局边距发生更改,则不会更新。您还可以使用
.inset(8.0)
避免使用负数
subView.snp.makeConstraints { make in
    make.top.leading.equalTo(view.safeAreaLayoutGuide)
childView.snp.makeConstraints { make in
    make.top.leading.bottom.equalTo(parentView.layoutMarginsGuide)
    make.trailing.equalTo(otherView.snp.leading).offset(-8.0)
}