2017-05-24 10 views
0

Je souhaite créer une vue de conteneur en fonction de la taille de la vue. Le code parle de lui-même, mais cela ne fonctionne pas. J'ai essayé d'utiliser override viewWillAppear en vain.NSLayoutConstraints ne fonctionne pas en référence à la vue

importation 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 

    } 


} 

Toutes les suggestions? Merci

+1

Vous n'avez rien pour définir la position x de la sous-vue – dan

+3

Vous devez également définir 'translatesAutoresizingMaskIntoConstraints' sur false – dan

Répondre

1

La création de NSLayoutConstraints comme cela retournera simplement la contrainte. Vous devez soit les ajouter à la vue Parent, ou si vous êtes iOS 8 ou plus, vous pouvez utiliser les ancres de mise en page beaucoup mieux.

Ainsi, par exemple:

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

devient

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

edit: et être clair, la route d'ancrage signifie que vous ne devez pas traiter avec les ajoutant manuellement après les avoir créés.