2017-06-02 2 views
0

Ich ändere manuell die Höhe der UINavigationBar in meiner benutzerdefinierten UINavigationController Unterklasse. Aus irgendeinem Grund, wenn ich den Code hinzufügen, um die Höhe in der viewDidAppear-Funktion zu ändern, wird die Höhe des Balkens korrekt geändert, aber wenn ich versuche, den Code in die viewDidLoad setzen passiert nichts. Hier ist, wie ich es mache:UI-Änderung funktioniert nur in ViewDidAppear?

class PetNavigationVC: UINavigationController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     let bounds = self.navigationBar.bounds 
     self.navigationBar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: 74) 

    } 
} 

Kann jemand mir helfen zu verstehen, warum dies der Fall ist?

+1

In viewDidLoad() wurden die nslayout-Bedingungen usw. noch nicht berechnet. Die uiview-Komponenten wurden in den Speicher geladen, instanziiert von Ihrer XIB oder Ihrem Storyboard, aber sie wurden noch nicht angelegt. – onnoweb

Antwort

0

Wie im Kommentar erwähnt, werden in der Methode viewDidLoad die Abhängigkeiten nicht einmal berechnet, und nichts wird wirklich geladen, außer für Ihre Klassenwerte. Auch das Hinzufügen Code viewDidLoad kann auch ein bisschen schwierig sein, da Benutzer sehen kann, was passiert gerade auf demant: D

Sie sollten Ihre Bilder oder jede UI bezogenes in viewWillAppear func oder in Verfahren DidLayoutSubviews einstellen ...

Verwandte Themen