Je suis complètement nouveau dans le développement iOS et je suis censé corriger quelques bugs dans une application iOS créée avec Swift 3.0 et Xcode 8, et cela fonctionne presque bien. Mais lorsque je l'ouvre avec Xcode 9 et Swift 4.0, il affiche des boutons très différents de ceux qu'ils étaient auparavant.
Voici le code source de l’un de ces boutons.
let button: UIButton = UIButton.init(type: UIButtonType.custom)
//set image for button
button.setImage(UIImage(named: "menu.png"), for: UIControlState())
button.frame = CGRect(x: 0, y: 0, width: 30, height: 23)
let barButton = UIBarButtonItem(customView: button)
button.addTarget(self, action: #selector(ViewController.shareButtonPressed), for: UIControlEvents.touchUpInside)
self.navigationItem.leftBarButtonItem = barButton
ce code est à l'intérieur de la méthode ViewDidLoad. Mon problème est quand je retire,
button.setImage(UIImage(named: "menu.png"), for: UIControlState())
il disparaît le bouton mais quand je change la hauteur et la largeur de,
button.frame = CGRect(x: 0, y: 0, width: 30, height: 23)
cela ne change rien. Mon problème est de savoir comment résoudre ce problème. Toute suggestion, réponse est très appréciée et si les détails fournis ne suffisent pas, merci de le mentionner. Je vous remercie!
À partir de iOS 11, les vues ajoutées aux barres d'outils à l'aide de UIBarButtonItem
à l'aide de UIBarButtonItem(customView:)
sont désormais présentées en utilisant la disposition automatique. Vous devez ajouter des contraintes de dimensionnement sur votre button
. Par exemple:
button.widthAnchor.constraintEqualToConstant(30.0).isActive = true
button.heightAnchor.constraintEqualToConstant(23.0).isActive = true
Sinon, la mise en page automatique utilisera la taille de contenu intrinsèque de votre vue d’en-tête, ce qui ne correspond probablement pas à vos attentes.
Pour plus d'informations, voir la session WWDC 2017 Mise à jour de votre application pour iOS 11 .
Swift 4:
button.widthAnchor.constraint(equalToConstant: 30.0).isActive = true
button.heightAnchor.constraint(equalToConstant: 20.0).isActive = true