web-dev-qa-db-fra.com

Comment changer la hauteur de la barre de navigation dans iOS 11?

Apparemment, le changement de hauteur de la barre de navigation faisait face à une nouvelle approche dans iOS 11. Dans les versions iOS précédentes, il était possible de modifier la hauteur de la barre de navigation en masquant la barre de navigation par défaut et en ajoutant une nouvelle avec un cadre personnalisé:

self.navigationController?.setNavigationBarHidden(true, animated: false)
let customNavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 64))
self.view.addSubview(customNavigationBar)

Mais il semble que cela ne fonctionne pas dans iOS 11 xCode beta. quelle que soit la nouvelle hauteur, il restera toujours à 44.

voici ce que j'ai dans xCode 9:

enter image description here

est-ce que quelqu'un sait comment résoudre le problème?

24
Mina

Votre code fonctionne bien et il n’ya rien de mal à cela. Si vous changez la couleur de fond de votre customNavigationBar, vous verrez que vous obtiendrez la barre de navigation avec la hauteur souhaitée. Mais il semble que ce soit un problème avec Xcode 9 de masquer la barre de navigation par défaut.

Votre code avec:

Xcode 9 enter image description here

Xcode 8 enter image description here

Comme vous pouvez le voir sur l'image Xcode 9, vous avez la barre de navigation personnalisée, mais celle par défaut ne se cache pas. Probablement un bug dans Xcode 9, je n'ai pas réussi non plus à le cacher dans le Storyboard.

Cela semble être un bogue dans Xcode 9, des rapports de bogues ont été archivés chez Apple.

12
Rashwan L

Il s’agit plus d’un hack jusqu’à Apple corrige le bogue. J’étais confronté au même problème. J’ai donc modifié la contrainte supérieure de la barre de navigation de 0 à 20.

Avant: enter image description here

Après: enter image description here

Si votre backgroundColor UINavigationBar est autre chose que du blanc, la barre d'état reste blanche. Vous pouvez résoudre ce problème en ajoutant ce qui suit dans cet UIViewController particulier.

let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor.red
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)

Avant: enter image description here

Après: enter image description here

Cela semble être un long hack, mais c'est toujours mieux que de revenir en arrière et de compiler avec Xcode 8.3.

12
Ameya Vichare

La seule façon pour que cela fonctionne est de supprimer la barre de navigation personnalisée actuelle et d'appliquer un UINavigationController incorporé à UIViewController. Éditeur -> Intégrer dans -> Contrôleur de navigation.

Dans les nouvelles propriétés du contrôleur de navigation créées, dans le menu "Simulations" du menu Utilitaires (barre de droite), l'attribut "Barre supérieure" doit être spécifié. Dans mon cas, j'avais besoin de la valeur "Barre de navigation opaque".

Je mets également la même valeur de 'Top Bar' sur mon UIViewController, juste pour être sûr.

En faisant cela, un nouvel "élément de navigation" sera à votre disposition et vous pourrez ré-ajouter vos éléments de boutons.

C'est tout ce que j'ai pu faire pendant que nous attendons la mise à jour de Xcode 9 pour y remédier.

1
Marco Nascimento

Dans iOS 11, nous ne pouvons pas modifier la hauteur de la barre de navigation . Si vous souhaitez augmenter la hauteur, utilisez une vue personnalisée.

Référence: https://forums.developer.Apple.com/thread/88202

1
Bharath

Vous n'avez toujours pas trouvé comment changer la taille en pixels. Mais il est possible de créer une double taille de barre de navigation (XCode 10.1):

    self.navigationController?.navigationBar.prefersLargeTitles = true

Résultat:

enter image description here

1
Alex