2017-05-24 10 views
0

ビューのサイズに基づいてコンテナビューを作成したいとします。コードはそれ自身のことを表しますが、機能しません。私は無駄にoverride 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

答えて

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

編集次のようになりますし、明確にするために、アンカールートは、あなたがそれらを手動で追加することに対処する必要がないことを意味しそれらを作成した後。

関連する問題