Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在单行中以编程方式自动布局约束_Swift_Autolayout - Fatal编程技术网

Swift 在单行中以编程方式自动布局约束

Swift 在单行中以编程方式自动布局约束,swift,autolayout,Swift,Autolayout,有没有办法在swift中的一行中设置左、右、上、下、宽、高自动布局约束 我记得几个月前看到过这一点,但在他们的文档中找不到:(首先,您不需要设置6个自动布局约束。您只需要4个 如果设置了左侧和右侧,则不需要宽度;如果设置了顶部和底部,则不需要高度 您可以调用NSLayoutConstraint,它接受7个参数,但需要调用4次,然后将它们添加到视图中 rbTop=NSLayoutConstraint(项:requestButton,属性:.top,relatedBy:.equal,toItem:v

有没有办法在swift中的一行中设置左、右、上、下、宽、高自动布局约束


我记得几个月前看到过这一点,但在他们的文档中找不到:(

首先,您不需要设置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