2016-04-28 1 views
2

J'ai une méthode qui définit l'apparence de UINavigationBar. FlightSearchViewController est sous-classé à partir de UIViewController mais la barre de navigation n'est pas mise à jour comme prévu. Si j'écris UIViewController à la place de FlightSearchViewController, tout fonctionne correctement.UIAppearance pour UINavigationBar ne fonctionne pas lorsqu'il est utilisé avec le contrôleur de vue personnalisé ...?

private class func setupNavigationBarAppearance() { 
     UINavigationBar.appearance().barStyle = .Black 
     UINavigationBar.appearance().translucent = false 
     UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor(), NSFontAttributeName: UIFont.ixiRegularFontOfSize(17)] 
     UINavigationBar.appearance().tintColor = UIColor.clearColor() 
     UINavigationBar.appearance().barTintColor = Color.navBarThemeColor 

     var navBarAppearanceControllers = [AnyObject.Type]() 
     navBarAppearanceControllers.append(FlightSearchViewController.self) 
     let navBarAppearance = UINavigationBar.appearanceWhenContainedInInstancesOfClasses(navBarAppearanceControllers) 
     navBarAppearance.barTintColor = UIColor.clearColor() 
     navBarAppearance.backgroundColor = UIColor.clearColor() 
     navBarAppearance.tintColor = UIColor.clearColor() 
     navBarAppearance.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
     navBarAppearance.shadowImage = UIImage() 
     navBarAppearance.translucent = true 
     navBarAppearance.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor(), NSFontAttributeName: UIFont.ixiRegularFontOfSize(17)] 
    } 
+0

Vous essayez de changer la couleur de la barre de navigation pour un viewController particulier. Droite? –

+0

oui ............. et autres choses –

Répondre

1

Votre barre de navigation ne figure pas dans FlightSearchViewController, mais plutôt une au-dessus en vue hiérarchique du contrôleur. 'appearanceWhenContainedInInstancesOfClasses' signifie UINavigationBar contenu dans votre viewController sera mis à jour. Mais ce n'est pas le cas puisque navigationBar est contenu dans UINavigationController.

Si vous essayez

let navBarAppearance = UINavigationBar.appearanceWhenContainedInInstancesOfClasses([UIViewController.self]), cela fonctionnera. Mais, vous verrez les changements sur chaque contrôleur de vue.

1

Pouvez-vous essayer de remplacer:

var navBarAppearanceControllers = [AnyObject.Type]() 
    navBarAppearanceControllers.append(FlightSearchViewController.self) 
    let navBarAppearance = UINavigationBar.appearanceWhenContainedInInstancesOfClasses(navBarAppearanceControllers) 
    navBarAppearance.barTintColor = UIColor.clearColor() 
    navBarAppearance.backgroundColor = UIColor.clearColor() 
    navBarAppearance.tintColor = UIColor.clearColor() 
    navBarAppearance.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
    navBarAppearance.shadowImage = UIImage() 
    navBarAppearance.translucent = true 
    navBarAppearance.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor(), NSFontAttributeName: UIFont.ixiRegularFontOfSize(17)] 

Avec:

UINavigationBar.appearance().barTintColor = UIColor.clearColor() 
    UINavigationBar.appearance().backgroundColor = UIColor.clearColor() 
    UINavigationBar.appearance().tintColor = UIColor.clearColor() 
    UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: .Default) 
    UINavigationBar.appearance().shadowImage = UIImage() 
    UINavigationBar.appearance().translucent = true 
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor(), NSFontAttributeName: UIFont.italicSystemFontOfSize(17)] 
+0

Le code en question utilise déjà UINavigationBar.appearance(). 'appearanceWhenContainedInInstancesOfClasses' est utilisé pour remplacer cela pour les vues requises. –