2016-04-28 39 views
2

我有一個方法設置UINavigationBar的外觀。 FlightSearchViewController是從UIViewController的子類,但導航欄未按預期更新。如果我寫UIViewController代替FlightSearchViewController,每件事情都可以正常工作。UIAavigationBar與自定義視圖控制器一起使用時無法工作......?

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]),它會工作。但是,您會看到每個視圖控制器上的更改。

1

你可以嘗試更換:

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

有了:

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'用於替代必要視圖。 –

相關問題