NSLayoutConstraints不参考视图

问题描述:

我想创建一个基于视图大小的容器视图。代码自身说明,但不起作用。我试过使用覆盖viewWillAppear无济于事。NSLayoutConstraints不参考视图

进口的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

您没有任何设置子视图的x位置 – dan

+3

您还需要将'translatesAutoresizingMaskIntoConstraints'设置为false – dan

像这样创建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

编辑:要说清楚,锚路线意味着你不必应付手动添加创建它们之后。