NSLayoutConstraints不参与视图

时间:2017-05-24 20:49:56

标签: ios swift nslayoutconstraint

我想根据视图大小创建容器视图。代码说明了一切,但它不起作用。我试过使用覆盖viewWillAppear无济于事。

导入UIKit

class ViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout, UITextFieldDelegate {

let searchBarContainer: UIView = {
    let sBarContainer = UIView()
    sBarContainer.backgroundColor = UIColor.gray
    return sBarContainer
}()



override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "Search Bar"
    collectionView?.backgroundColor = UIColor.white

    view.addSubview(searchBarContainer)

    NSLayoutConstraint(item: searchBarContainer, attribute: .width, relatedBy: .equal, toItem: view, attribute: .width, multiplier: 1, constant: 0).isActive = true

    NSLayoutConstraint(item: searchBarContainer, attribute: .height, relatedBy: .equal, toItem: view, attribute: .height, multiplier: 1, constant: 0).isActive = true

    NSLayoutConstraint(item: searchBarContainer, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0).isActive = true

   }


}

有什么建议吗?感谢

1 个答案:

答案 0 :(得分:1)

像这样创建NSLayoutConstraints只会返回约束。您需要将它们添加到父视图中,或者如果您是iOS 8+,则可以使用更优越的布局锚点。

所以,例如:

NSLayoutConstraint(item: searchBarContainer, attribute: .width, relatedBy: .equal, toItem: view, attribute: .width, multiplier: 1, constant: 0).isActive = true

变为

label.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true

编辑:并且要清楚,锚定路线意味着您不必在创建它们之后手动添加它们。