Swift 在单行中以编程方式自动布局约束
有没有办法在swift中的一行中设置左、右、上、下、宽、高自动布局约束Swift 在单行中以编程方式自动布局约束,swift,autolayout,Swift,Autolayout,有没有办法在swift中的一行中设置左、右、上、下、宽、高自动布局约束 我记得几个月前看到过这一点,但在他们的文档中找不到:(首先,您不需要设置6个自动布局约束。您只需要4个 如果设置了左侧和右侧,则不需要宽度;如果设置了顶部和底部,则不需要高度 您可以调用NSLayoutConstraint,它接受7个参数,但需要调用4次,然后将它们添加到视图中 rbTop=NSLayoutConstraint(项:requestButton,属性:.top,relatedBy:.equal,toItem:v
我记得几个月前看到过这一点,但在他们的文档中找不到:(首先,您不需要设置6个自动布局约束。您只需要4个 如果设置了左侧和右侧,则不需要宽度;如果设置了顶部和底部,则不需要高度 您可以调用NSLayoutConstraint,它接受7个参数,但需要调用4次,然后将它们添加到视图中 rbTop=NSLayoutConstraint(项:requestButton,属性:.top,relatedBy:.equal,toItem:view,属性:.top,乘数:1.0,常数:30) 也可以通过定位直接设置约束
requestView.widthAnchor.constraint(equalToConstant:view.bounds.width).isActive=true,这也是一种很好的方法,但是您需要设置4个约束。您可能正在考虑这两种UIView扩展方法 如果您希望保持它的简单性,不使用第三方库,但仍然希望以编程方式处理约束时更轻松,那么可以根据需要轻松地修改它
public func anchor(_ top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil, topConstant: CGFloat = 0, leftConstant: CGFloat = 0, bottomConstant: CGFloat = 0, rightConstant: CGFloat = 0, widthConstant: CGFloat = 0, heightConstant: CGFloat = 0) {
translatesAutoresizingMaskIntoConstraints = false
_ = anchorWithReturnAnchors(top, left: left, bottom: bottom, right: right, topConstant: topConstant, leftConstant: leftConstant, bottomConstant: bottomConstant, rightConstant: rightConstant, widthConstant: widthConstant, heightConstant: heightConstant)
}
public func anchorWithReturnAnchors(_ top: NSLayoutYAxisAnchor? = nil, left: NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil, topConstant: CGFloat = 0, leftConstant: CGFloat = 0, bottomConstant: CGFloat = 0, rightConstant: CGFloat = 0, widthConstant: CGFloat = 0, heightConstant: CGFloat = 0) -> [NSLayoutConstraint] {
translatesAutoresizingMaskIntoConstraints = false
var anchors = [NSLayoutConstraint]()
if let top = top {
anchors.append(topAnchor.constraint(equalTo: top, constant: topConstant))
}
if let left = left {
anchors.append(leftAnchor.constraint(equalTo: left, constant: leftConstant))
}
if let bottom = bottom {
anchors.append(bottomAnchor.constraint(equalTo: bottom, constant: -bottomConstant))
}
if let right = right {
anchors.append(rightAnchor.constraint(equalTo: right, constant: -rightConstant))
}
if widthConstant > 0 {
anchors.append(widthAnchor.constraint(equalToConstant: widthConstant))
}
if heightConstant > 0 {
anchors.append(heightAnchor.constraint(equalToConstant: heightConstant))
}
anchors.forEach({$0.isActive = true})
return anchors
}
你到底想做什么?你永远不会在任何视图上设置所有这六个约束,因此目前的问题毫无意义。展示一些现有代码,我们可以讨论它是否可以缩短。还要注意,有第三方库可以缩短约束的构造,这可能就是你所想的(但我们不能在这里讨论这个问题)。使用“CGPoint”来更改位置或“CGRect”对于位置和尺寸“检查此线程:@matt我记得函数将所有六个作为参数,但不要求您设置每一个参数。此外--如果我错了,请纠正我--在某些情况下,您确实设置了所有六个约束(例如在滚动视图中设置内容视图)这是完全正确的!内容视图需要固定在滚动视图的四面,并具有高度和宽度。-无论如何,这听起来像是第三方的东西。iOS Cocoa中没有内置这样的单一命令。您可能正在考虑SnapKit。
make.edges.equalTo(superview)
kaboom