【问题标题】:View constraints - fit a subview视图约束 - 适合子视图
【发布时间】:2014-09-06 15:27:06
【问题描述】:

我正在向视图添加一个子视图,我希望它填充视图的高度和宽度。我在约束方面遇到困难。任何帮助表示赞赏。这是我目前拥有的:

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

【问题讨论】:

    标签: ios uiview swift autolayout


    【解决方案1】:

    斯威夫特 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)
    

    【讨论】:

      【解决方案2】:

      以下代码应该可以工作:

          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 调用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      相关资源
      最近更新 更多