webentwicklung-frage-antwort-db.com.de

Wie ändere ich die Höhe der Navigationsleiste in iOS 11?

Das Ändern der Navigationsleistenhöhe sah sich in iOS 11 einem neuen Ansatz gegenüber. In früheren iOS-Versionen war es möglich, die Navigationsleistenhöhe zu ändern, indem die Standardnavigationsleiste ausgeblendet und eine neue mit benutzerdefiniertem Rahmen hinzugefügt wurde:

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)

Aber es scheint, dass es in iOS 11 xCode Beta nicht funktioniert. Egal wie hoch die neue Höhe ist, sie bleibt immer bei 44.

das habe ich in xCode 9:

enter image description here

weiß jemand, wie man das Problem löst?

24
Mina

Ihr Code funktioniert einwandfrei und es ist nichts falsch daran. Wenn Sie die Hintergrundfarbe Ihres customNavigationBar ändern, sehen Sie, dass Sie die Navigationsleiste mit der gewünschten Höhe erhalten. Es scheint jedoch ein Problem mit Xcode 9 zu sein, die Standardnavigationsleiste auszublenden.

Ihr Code mit:

Xcode 9 enter image description here

Xcode 8 enter image description here

Wie Sie im Xcode 9-Bild sehen können, haben Sie die benutzerdefinierte Navigationsleiste, die Standardnavigationsleiste wird jedoch nicht ausgeblendet. Wahrscheinlich ein Fehler in Xcode 9, ich habe es auch nicht geschafft, ihn durch das Storyboard zu verstecken.

Dies scheint ein Fehler in Xcode 9 zu sein, Fehlerberichte wurden an Apple übermittelt.

12
Rashwan L

Dies ist eher ein Hack, bis Apple behebt den Fehler. Ich hatte das gleiche Problem, also habe ich die obere Einschränkung der Navigationsleiste von 0 auf 20 geändert.

Vorher: enter image description here

Nach: enter image description here

Wenn Ihre UINavigationBar-Hintergrundfarbe nicht weiß ist, wird die Statusleiste weiß angezeigt. Sie können dies beheben, indem Sie in diesem bestimmten UIViewController Folgendes hinzufügen.

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

Vorher: enter image description here

Nach: enter image description here

Dies scheint ein langer Hack zu sein, ist aber immer noch besser, als mit Xcode 8.3 zurückzukehren und zu kompilieren.

12
Ameya Vichare

Die einzige Möglichkeit, es zum Laufen zu bringen, bestand darin, die aktuelle benutzerdefinierte Navigationsleiste zu löschen und einen eingebetteten UINavigationController auf den UIViewController anzuwenden. Editor -> Einbetten in -> Navigationssteuerung.

In den neu erstellten Eigenschaften des Navigationscontrollers muss im Menü "Dienstprogramme" (rechte Leiste) "Simulierte Metriken" das Attribut "Oberste Leiste" angegeben werden. In meinem Fall brauchte ich den Wert 'Opaque Navigation Bar'.

Ich habe auf meinem UIViewController auch den gleichen Wert für "Top Bar" festgelegt, um sicherzugehen.

Auf diese Weise steht Ihnen ein neues Navigationselement zur Verfügung, und Sie können Ihre Balkenschaltflächenelemente erneut hinzufügen.

Es ist das Beste, was ich tun kann, während wir auf das Update von Xcode 9 warten, um es zu beheben.

1

In iOS 11 können wir die Höhe der Navigationsleiste nicht ändern . Wenn Sie die Höhe erhöhen möchten, sollten Sie die benutzerdefinierte Ansicht verwenden.

Referenz: https://forums.developer.Apple.com/thread/88202

1
Bharath

Ich habe immer noch nicht herausgefunden, wie ich die Größe in Pixeln ändern kann. Es ist jedoch möglich, eine doppelte Navigationsleistengröße zu erstellen (XCode 10.1):

    self.navigationController?.navigationBar.prefersLargeTitles = true

Ergebnis:

enter image description here

1
Alex