2016-03-28 26 views
2

Ich versuche, alle Elemente einer NavigationBar in der vertikalen Mitte zu platzieren, aber ich weiß nicht, wie es geht?Navigationsleiste Elemente nicht zentriert

enter image description here

Der graue Teil über dem Gelb die navigationbar. Wie wir sehen können, sind der Titel und andere Elemente der Navigationsleiste nicht vertikal zentriert.

Wie kann ich das tun?

My-Code so weit:

let navigationItem = UINavigationItem() 
    navigationItem.title = sTitle;  
    navigationBar.frame = CGRectMake(0,0,screenwidth, 50); 
    navigationBar.titleTextAttributes = [ NSFontAttributeName: titleFont, NSForegroundColorAttributeName: UIColor.blackColor()] 
    self.view.addSubview(navigationBar); 
+3

20 Pixel Raum der Statusleiste, und Ihre Statusleiste Farbe ist weiß. also kannst du das nicht sehen. –

+0

Können Sie bitte etwas mehr Code für die 'navigationBar' Deklaration hinzufügen? und warum Sie die Navigationsleiste in der View-Controller-Ansicht hinzufügen, sollte es von NavigationController/ViewController sein. Auch wie Ashish sagte, haben Sie 20 Pixel Speicherplatz auch in der Navigationsleiste berechnet. – HardikDG

Antwort

0

Sie können alle Ihre Elemente zentrieren, wenn Sie die Statusleiste ausblenden, was durch Hinzufügen der folgenden Informationen erreicht werden kann.plist:

<key>UIStatusBarHidden</key> 
<true/> 
<key>UIViewControllerBasedStatusBarAppearance</key> 
<false/> 

Und Ihre Viewcontroller würde wie folgt aussehen:

enter image description here

können Sie mehr Möglichkeiten finden Sie in der Statusleiste in diesem Link zu verstecken: hide Status bar

0

Zum einen versuchen nativen Ansatz zu verwenden Navigationsleiste Titel setzen wie:

self.title="Test title" 

Oder wenn Sie benutzerdefinierte Schriftart möchte dies haben versuchen:

self.navigationController.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "CustomFont", size: 15)!] 
+0

Vielen Dank für Ihre Hilfe, aber es hat nicht funktioniert. Es gibt alle Elemente, die nicht zentriert sind. Der Link "zurück" ist ein navigationItem und ist auch nicht zentriert. –

0

Wie in den Kommentaren erwähnt, ist der Grund, warum diese Elemente nicht vertikal zentriert sind, die Tatsache, dass die st atus bar wird angezeigt, der 10 Punkte oben in der Navigationsleiste reserviert. Es ist einfach nicht sichtbar, weil es den Stil des hellen Inhalts verwendet. Wenn der Akku fast leer war oder Sie aufgeladen haben, sehen Sie den Akku oben rechts.

Sie müssen die Statusleiste entfernen, die die Höhe der Navigationsleiste verringert. Da es verschiedene Möglichkeiten gibt, die Statusleiste auf der Basis von Projekteinstellungen und Kontext auszublenden, werde ich nicht erläutern, wie die Statusleiste entfernt wird, aber Informationen dazu sind weit verbreitet.

Sobald dieser zusätzliche Platz entfernt wurde, werden Ihre Objekte vertikal zentriert.

+0

Vielen Dank. OK, ich verstehe. Es hat etwas mit der Statusleiste zu tun, aber ich hatte bereits die Statusleiste mit prefersStatusBarHidden = true entfernt. Aber immer noch sehe ich die Gegenstände nicht zentriert. –

+0

Werden Sie einen neuen Screenshot veröffentlichen? – Joey

0

Der Text/die Elemente der Navigationsleiste werden nie zentriert aussehen, so wie Sie Dinge anzeigen. Technisch sind sie bereits in der Nav-Leiste zentriert, aber die Nav-Leiste verwaltet die Zentrierung und hält alle Elemente auf den unteren Rand der Navigationsleiste beschränkt.

Die Statusleiste benötigt 20px. Die Navigationsleiste sollte eine Höhe von 44 Pixeln haben. Der obere Teil der Navigationsleiste sollte auf den Rand des oberen Layouts beschränkt sein, NICHT auf die obere Ansichtsgrenze. Der Grund dafür ist, dass ios die Statusleiste entfernt (eigentlich die obersten 20 Pixel von allem, was im Hochformat angezeigt wird), wenn das Gerät in den Querformat-Modus gedreht wird. Wenn Ihre Navigationsleiste 44px groß ist, zeigt das Umschalten des Geräts in den Querformatmodus an, dass der Text vertikal korrekt zentriert ist.

Mein Vorschlag für Sie, all dies zu sehen, ist eine kleine Ansicht über der Navigationsleiste zu erstellen. Machen Sie die Ansicht 20px hoch, beschränken Sie sie auf View.Top (NICHT an den Rand) und stellen Sie den Hintergrund oder die Tintcolor auf Hellgrün oder etwas anderes. Dann setzen Sie Ihre Navigationsleiste auf 44px, beschränken Sie sie auf die Top Layout Margin Guide (NICHT bis zum Ende der Statusansicht, die Sie gerade erstellt haben, und NICHT von der View.Top Boundary versetzt).

Dann, wenn Sie das Gerät hin und her spiegeln, werden Sie sehen, dass Ihr Text immer in der Navigationsleiste zentriert ist, und die Statusleiste wird kommen und über die Navigationsleiste gehen.

PS. Mach das zuerst im Storyboard, es ist am einfachsten.