2016-08-01 7 views
1

meine App mit einem Tab-Leiste-Controller starten, dann geht jeder Tab mit einer Navigation VC. Ich wünsche Tab-Leiste in den unteren verstecken, wenn ich in einen zweiten VC mit der Navigation beginnen, und auch die Farbe der Navigationsleiste auf orange Farbe ändern, hier ist der Code in der zweiten VC:Code in ViewWillAppear funktioniert nicht, warum?

override func viewWillAppear(animated: Bool) { 
    var tabBarHide = self.tabBarController!.tabBar.hidden 
    print(tabBarHide) 
    if !tabBarHide { 
     tabBarHide = true 
    } 
    print(tabBarHide) 
    UINavigationBar.appearance().barTintColor = UIColor.init(red: 247/255, green: 119/255, blue: 0/255, alpha: 1) 

} 

Es tut ausdrucken : false & wahr jedes Mal wenn ich zu diesem VC navigiere, aber nichts passiert mit der Ansicht. Es funktioniert nicht. Warum?

+0

Wie zuweisen Sie den Wert auf 'self.tabBarController'? – Paulw11

+0

BTW, der Code "if! TabBarHide {tabBarHide = true}" kann durch "tabBarHide = true" verkürzt werden, und es ist klarer – FredericP

Antwort

1

Sie können den Proxy UIAppearance nicht verwenden, um das Aussehen eines Objekts zu ändern, das sich bereits in der Ansichtshierarchie befindet. Vom UIAppearance documentation:

iOS gilt Aussehen ändert sich, wenn eine Ansicht, die ein Fenster betritt, ist es nicht das Aussehen einer Ansicht nicht ändern, die in einem Fenster bereits ist. Um das Aussehen einer Ansicht zu ändern, die sich gerade in einem Fenster befindet, entfernen Sie die Ansicht aus der Ansichtshierarchie und legen Sie sie dann zurück.

Sie können die Tönungsfarbe der aktiven Navigationsleiste direkt ändern:

self.navigationController?.navigationBar.tintColor = UIColor.init(red: 247/255, green: 119/255, blue: 0/255, alpha: 1) 

Was, warum die Tab-Leiste nicht versteckt ist, werden Sie Ihre lokalen Variable ändern, nicht die hidden Eigenschaft der Tab-Leiste. Sie wollen:

self.tabBarController?.tabBar.hidden = true 

Ihre viewWillAppear sollte also sein, so etwas wie:

override func viewWillAppear(animated: Bool) { 

    super.viewWillAppear(animated) 

    self.tabBarController?.tabBar.hidden = true 
    self.navigationController?.navigationBar.tintColor = UIColor.init(red: 247/255, green: 119/255, blue: 0/255, alpha: 1) 

} 
+0

Es scheint .navigationBar.tintColor ist die Farbe des Textes, ich möchte Hintergrundfarbe ändern, dann ich versucht .navigationBar.backgroundColor, es funktioniert nicht D; –

+0

'self.navigationController? .navigationBar.backgroundColor' arbeitete für mich – Paulw11

Verwandte Themen