2016-04-28 6 views
2

私はUINavigationBarの外観を設定するメソッドを持っています。 FlightSearchViewControllerはUIViewControllerからサブクラス化されていますが、ナビゲーションバーは期待どおりに更新されません。 FlightSearchViewControllerの代わりにUIViewControllerを書くと、すべて正常に動作します。UIAavigationBarのUIA外観は、カスタムビューコントローラで使用すると機能しません...?

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)] 

をして:

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

特定のviewControllerのナビゲーションバーの色を変更しようとしています。右? –

+0

はい.............その他 –

答えて

1

あなたのナビゲーションバーがFlightSearchViewControllerに含まれていない、むしろそれは、ビューコントローラの階層でそれより上です。 'appearanceWhenContainedInInstancesOfClasses'は、あなたのviewControllerに含まれているUINavigationBarが更新されることを意味します。しかし、UINavigationControllerに含まれているnavigationBar以降はそうではありません。

あなたは

let navBarAppearance = UINavigationBar.appearanceWhenContainedInInstancesOfClasses([UIViewController.self])をしようとすると、それが動作します。しかし、すべてのView Controllerで変更が表示されます。

1

はあなたが交換することを試みることができ

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

問題のコードはすでにUINavigationBar.appearance()を使用しています。 'appearanceWhenContainedInInstancesOfClasses'は、必要なビューのためにそれを上書きするために使用されます。 –

関連する問題