J'utilise un bouton comme vue du titre de ma UITableViewController
qui ouvre une liste déroulante de catégories. La sélection d'une catégorie filtre le contenu de la vue tableau en fonction de la catégorie sélectionnée.
Le bouton indique le nom de la catégorie sélectionnée et une petite flèche, semblable à l'apparence habituelle (ou encore à l'apparence de iBooks? Je ne l'ai pas utilisé depuis un moment). J'aimerais donc qu'il ait le même comportement qu'un titre standard et qu'il soit grand au début et réduit lorsque la vue du tableau défile.
Y a-t-il un moyen de faire cela?
Merci
Il semble que, en raison des nouveaux grands titres, IOS11 exige que les contraintes de la vue personnalisée dans le fichier navigationItem.titleView soient définies.
Faites ceci par exemple:
customView.widthAnchor.constraint(equalToConstant: 200).isActive = true
customView.heightAnchor.constraint(equalToConstant: 44).isActive = true
self.navigationItem.titleView = customView
Notez que cela doit être fait pour la largeur et la hauteur.
Ça devrait marcher. Pas besoin d'ajouter un bouton, du moins dans mon cas ...
Cela a été suggéré par Apple pour vous assurer que vous n'avez pas de vues personnalisées de taille zéro. Voir la diapositive 33 dans https://developer.Apple.com/videos/play/wwdc2017/204/
On dirait que les touches sont cassées pour navigationItem.titleView. Gestes, événements tactiles et boutons - rien ne fonctionne
Cela ressemble à un bogue dans iOS 11: https://forums.developer.Apple.com/thread/82466
J'ai provisoirement implémenté cette solution de contournement:
private lazy var navBarActionButtonIOS11: UIButton = {
button.addTarget(self.navTitleView, action: #selector(self.navTitleView.didTapView), for: .touchUpInside)
return button
}()
[...]
navigationItem.titleView = navTitleView
if #available(iOS 11.0, *), let navBar = navigationController?.navigationBar {
navBarActionButtonIOS11.removeFromSuperview()
navBar.addSubview(navBarActionButtonIOS11)
navBarActionButtonIOS11.center.x = navBar.center.x
}
Une autre solution pourrait consister à affecter directement un UIButton à navigationItem.titleView.
J'espère que Apple corrigera ça bientôt!
Eh bien, j'ai eu le même problème. J'ai des boutons UIB dans UINavigationItem.titleView et ceux-ci ne réagissaient pas du tout aux contacts. Le problème est que la vue où ces boutons sont où de taille (0,0) en raison de la mise en page automatique. Donc, pour résoudre ce problème, vous devez ajouter une vue supplémentaire dans votre vue personnalisée, appelons-la "contentView" et placez tous vos contrôles dans cette contentView. De plus, contentView doit avoir une taille définie avec des contraintes. Le test rapide consiste à ajouter des contraintes de largeur et de hauteur à contentView. Et tout fonctionne à nouveau.
J'espère que cela aide quelqu'un.