2016-10-29 2 views
3

Ich habe den folgenden Code:Erhöhung navigationbar Höhe

func navbarbutton() { 
    UIView.animateWithDuration(0.2, animations: {() -> Void in 
     let current = self.navigationController?.navigationBar.frame 
     self.navigationController?.navigationBar.frame = CGRectMake(self.frame!.origin.x, self.frame!.origin.y, self.frame!.size.width, current!.size.height + 50) 
     self.navigationController?.navigationBar.layoutIfNeeded() 
    }) 
} 

Ich bin in der Lage, die Höhe der Navigationsleiste um 50 dp zu erhöhen. Das ist nicht das Problem für mich. Das Problem, das ich habe, ist, dass die UIBarButtonItems alle nach unten ausgerichtet sind. Wie kann ich sie nach oben ausrichten, so dass ich selbst mehr auf den Boden geben kann? Ich bin immer etwas nach dem Bild:

enter image description here

Ist es möglich, es an die Spitze ausgerichtet werden?

+0

Überprüfen Sie meine Antwort und lassen Sie mich wissen, der Code funktioniert ... – Joe

Antwort

2

diesen Code Versuchen:

Hinweis:-Code in Swift getestet 3.

Antwort 1:aktualisiert Antwort

class ViewController: UIViewController { 

var customBar: UINavigationBar = UINavigationBar() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    //Title 
    title = "Some Title" 

    // Add bar button item 
    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped)) 
    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(addTapped)) 

    self.customBar.frame = CGRect(x:0, y:0, width:view.frame.width, height:(navigationController?.navigationBar.frame.height)! + 50) 
    self.customBar.backgroundColor = UIColor.green 
    self.view.addSubview(customBar) 
} 

func addTapped() { 

    print("Button Pressed") 

} 

Ausgabe:

enter image description here


Antwort 2:

override var isViewLoaded: Bool { 

    // Add bar button item 
    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped)) 
    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(addTapped)) 

    //Vertical and Horizonal barButtonItem position offset 
    navigationItem.leftBarButtonItem?.setTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: 20), for: UIBarMetrics.default) 

    navigationItem.rightBarButtonItem?.setTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: 20), for: UIBarMetrics.default) 

    return true 
} 

func addTapped() { 

    print("Button Pressed") 

} 

Hinweis: obige Code funktioniert nur in isViewLoaded: Bool method.But, No luck.When habe ich versucht, diese Code in anderen ViewLoad-Methode.

Ausgabe 1: barButtonItem wurde 20 Pixel vertikal verschoben.

enter image description here

Ausgang 2: barButtonItem 20 bewegte Pixel vertikal nach unten.

enter image description here

Hope, beheben Above Code Ihr Problem.

+0

eine weitere Frage, wie Apple es so macht, dass es so schön animiert wenn der Benutzer die Zurück-Taste drückt? Wenn Sie auf die Seite gehen, wird sie größer und kleiner, wenn Sie zurückgehen! – KVISH

+0

Sie könnten so etwas versuchen ..... func backTapped (Absender: UIBarButtonItem) { navigationController? .popViewControllerAnimated (true) } ..... ungetesteten Code .so, lassen Sie mich wissen – Joe

+0

irgendein Glück ?. Ich habe gerade eine einfache Animation auf dem Zurück-Button während VC-Übergang erstellt ... lassen Sie es mich wissen. Ich werde die Antwort aktualisieren ... – Joe

1

Leider können Sie das nicht tun.

Die Ansichtshierarchie innerhalb der UINavigationBar ist privat, so dass Sie sie nicht manipulieren können, ohne über die Subviews zu iterieren und alles damit zu tun. Das ist wahrscheinlich keine gute Idee.

Aus Neugierde habe ich mit dem View-Debugger die Nachrichten-App in iOS 10 angeschaut, weil sie das offensichtlich tun. Sie erreichen das Layout tatsächlich, indem sie ihr eigenes UIButton hinzufügen, um das back und rightBarButtonItem zu ersetzen. Dies ist etwas, was Sie tun könnten, aber sie setzen auch das Alpha einer der internen (und privaten) Inhaltsansichten auf Null, so dass der ursprüngliche Inhalt nicht mehr sichtbar ist.
Dies ist etwas, was Sie leider nicht so leicht tun können. Sie können versuchen, Dinge zu hacken, bis es funktioniert, aber denken Sie daran, dass Sie auch mit Push/Pop, in Anrufstatusleisten, interaktiven Übergängen und Rotationsereignissen umgehen müssen.

Wenn Sie jedoch nicht für den iMessage Stil gehen und wollten nur einige Inhalte unter Ihrer Navigationsleiste hinzuzufügen, warum sucht nicht ein UIVisualEffectView zum topLayoutGuide in Ihrem UIViewController bei Pinning? Sie können ziemlich gut einen ziemlich schönen Look bekommen und es erspart viel Hacking. Hier ein Beispiel:

Example

+0

Wissen Sie, wie Google es in der Hangouts App getan hat? – KVISH

+0

@KVISH: Ich vermute, dass sie irgendeine Art von benutzerdefiniertem Navigations-Controller haben, der davon abhebt, wie stark sie sich vom Standard "UINavigationController" unterscheidet, aber ich weiß nicht sicher – liamnichols

Verwandte Themen