视图约束 - 安装子视图

4

我正在向一个视图添加子视图,并希望它填充整个视图的高度和宽度。但是我在使用约束时遇到了困难。希望能得到帮助。以下是我的当前代码:

    self.view.addSubview(self.mainView)

    var leftSideConstraint = NSLayoutConstraint(item: self.mainView, attribute: .Left, relatedBy: .Equal, toItem: self.view, attribute: .Left, multiplier: 1.0, constant: 0.0)
    var bottomConstraint = NSLayoutConstraint(item: self.mainView, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 1.0, constant: 0.0)
    var widthConstraint = NSLayoutConstraint(item: self.mainView, attribute: .Width, relatedBy: .Equal, toItem: self.view, attribute: .Width, multiplier: 1.0, constant: 0.0)
    var heightConstraint = NSLayoutConstraint(item: self.mainView, attribute: .Height, relatedBy: .Equal, toItem: self.view, attribute: .Height, multiplier: 1.0, constant: 0.0)
    self.view.addConstraints([leftSideConstraint, bottomConstraint, widthConstraint, heightConstraint])
2个回答

14

Swift 5

这里有一种优雅的方法,使用UIView扩展。

extension UIView {
    func addConstrained(subview: UIView) {
        addSubview(subview)
        subview.translatesAutoresizingMaskIntoConstraints = false
        subview.topAnchor.constraint(equalTo: topAnchor).isActive = true
        subview.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
        subview.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
        subview.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
    }
}

然后您可以在需要的任何地方使用以下代码添加子视图

yourContainerView.addConstrained(subview: yourSubview)

6
以下代码应该可以正常工作:
    let mainView = UIView() //Make sure your mainView is initialized
    mainView.backgroundColor = UIColor.blueColor() //For test purpose

    mainView.setTranslatesAutoresizingMaskIntoConstraints(false) //Don't forget this line
    view.addSubview(mainView)

    var leftSideConstraint = NSLayoutConstraint(item: mainView, attribute: .Left, relatedBy: .Equal, toItem: view, attribute: .Left, multiplier: 1.0, constant: 0.0)
    var bottomConstraint = NSLayoutConstraint(item: mainView, attribute: .Bottom, relatedBy: .Equal, toItem: view, attribute: .Bottom, multiplier: 1.0, constant: 0.0)
    var widthConstraint = NSLayoutConstraint(item: mainView, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 1.0, constant: 0.0)
    var heightConstraint = NSLayoutConstraint(item: mainView, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 1.0, constant: 0.0)
    view.addConstraints([leftSideConstraint, bottomConstraint, heightConstraint, widthConstraint])

作为替代方案,您可以使用自动布局可视化格式语言:
    let mainView = UIView() //Make sure your mainView is initialized
    mainView.backgroundColor = UIColor.blueColor() //For test purpose

    mainView.setTranslatesAutoresizingMaskIntoConstraints(false) //Don't forget this line
    view.addSubview(mainView)

    var viewsDict = ["mainView" : mainView]

    var horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|[mainView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict)
    var verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|[mainView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict)
    view.addConstraints(horizontalConstraints)
    view.addConstraints(verticalConstraints)

谢谢!我忘记了调用setTranslatesAutoresizingMaskIntoConstraints方法。 - g3k0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接