Affichage UISearchController la barre de recherche par programme

Note 1: Cette question se rapporte à l'ajout d'un UISearchController la barre de recherche en dehors de la vue de la table de la mise à jour - non PAS que la vue de la table d'en-tête.

Note 2: Quelques essais et d'erreur qui m'a conduit à une solution. Veuillez voir mon réponse ci-dessous.

Je suis nouveau sur le développement iOS et je suis mal à travailler avec les UISearchController classe. J'ai une-vue-contrôleur, et à mon avis du contrôleur de vue, j'ai l'intention d'avoir une barre de recherche ci-dessus une vue de la table. Je tiens la barre de recherche pour être lié à une UISearchController. Depuis l'interface builder n'est pas venu avec un UISearchController, je suis en ajoutant le contrôleur de la programmation. Après l'instanciation d'un UISearchController, j'ai essayé d'ajouter la recherche du contrôleur de la barre de recherche de mon point de vue, par programme, mais n'ont pas été couronnés de succès. J'ai essayé de réglage de la barre de recherche du cadre et de donner contraintes de mise en page automatique, mais aucune de ces approches n'a fonctionné pour moi (c'est à dire quand je lance l'application, rien ne s'affiche). Voici le dernier code que j'ai essayé:

    let searchController = UISearchController(searchResultsController: nil)

    //Set the search bar's frame
    searchController.searchBar.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 50)

    //Constraint to pin the search bar to the top of the view
    let topConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)
    searchController.searchBar.setTranslatesAutoresizingMaskIntoConstraints(false)

    self.view.addSubview(searchController.searchBar)

    self.view.addConstraint(topConstraint)

Toute aide serait grandement appréciée! Merci!!!!

EDIT: l'Aide d'un seul de réglage de la barre de recherche de l'image ou vous donner contraintes de mise en page automatique (par opposition à une combinaison des deux que j'ai d'abord essayé) semble fonctionner au premier abord, mais après avoir appuyé sur la barre de recherche, vous aurez des questions comme l'a souligné Dwight. J'ai laissé le code de ces cas, dans le cas où il est utile de la comparer à ce que vous avez actuellement, mais pour une solution de travail, voir ma réponse ci-dessous.

À l'aide de contraintes de mise en page automatique:

    let searchController = UISearchController(searchResultsController: nil)

    let topConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: (statusBarHeight + navigationBarHeight!))
    let leftConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0)
    let rightConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0)
    let heightConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 44)
    searchController.searchBar.setTranslatesAutoresizingMaskIntoConstraints(false)

    searchController.searchBar.addConstraint(heightConstraint)

    self.view.addSubview(searchController.searchBar)

    self.view.addConstraints([topConstraint, leftConstraint, rightConstraint])

J'ai mis le topConstraint constante à la hauteur de la barre d'état, plus la hauteur de la barre de navigation, que mon point de vue, contrôleur est intégré dans une manette de navigation.

Ajustement de la monture:

    let searchController = UISearchController(searchResultsController: nil)

    searchController.searchBar.frame = CGRect(x: 0, y: (statusBarHeight + navigationBarHeight!), width: self.view.frame.size.width, height: 44)

    self.view.addSubview(searchController.searchBar)
essayez cette link1, link2 peut-être vous aider
merci pour les liens! La première semble faire exactement ce que je veux avec un peu plus de interface builder participation, je vais donc regarder de plus près. J'utilise UISearchDisplayController, qui je crois est obsolète depuis iOS 8.
J'ai couru dans le même problème que vous, cependant, je vais avoir des ennuis après que l'utilisateur clique sur la barre de recherche. Avec le cadre de l'option, la barre de recherche glisse hors de la vue et de la tableview est indiqué mais pas positionné correctement. Avec les contraintes de l'option, l'application se bloque avec une "Le point de vue de la hiérarchie n'est pas préparé pour la contrainte:" erreur une fois exploitée. Avez-vous ces problèmes?
merci pour cette. Vous êtes de droite ni de solution dans edition 1 fonctionne. J'ai confirmé les mêmes problèmes que vous avez eu. Veuillez voir edit 2! Qui semble bien fonctionner pour moi. Laissez-moi savoir si cela fonctionne pour vous!
wow, merci beaucoup pour la réponse, je pensais que ce serait une cause perdue. Edit 2 fonctionne à merveille, beau travail!! Une douleur juste pour obtenir la fonctionnalité de UISearchDisplayController avec UISearchController! Vous devriez certainement post edit 2 comme une réponse à cette question pour aider les autres. Merci encore!

OriginalL'auteur kcstricks | 2015-07-08