2014-09-24 121 views
111

狀態欄中的背景文字仍然是黑色。如何將顏色更改爲白色?iOS 8中的NavigationBar欄,色調和標題文字顏色

// io8, swift, Xcode 6.0.1 
override func viewDidLoad() { 
    super.viewDidLoad() 
    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor() 
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orangeColor()] 

} 

enter image description here

+0

謝謝!它工作很好。 – Raja 2017-08-21 09:52:06

回答

214

AppDelegate.swift,在application(_:didFinishLaunchingWithOptions:)我把以下內容:

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0) 
UINavigationBar.appearance().tintColor = UIColor.white 
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white] 

對於titleTextAttributes中, docs說:

您可以指定字體,文本顏色,文字陰影顏色,文字 陰影在文本標題偏移屬性字典

+2

如果我們有多個導航欄怎麼辦? – sumit 2016-04-12 03:58:44

+5

tintColor不適用於Xcode 7.3.1。文本仍然是黑色的。 – triiiiista 2016-05-26 13:47:19

+1

謝謝你說在哪裏放置代碼。這幫助了很多。 – krummens 2016-06-09 20:25:25

78

普遍地改變顏色,此代碼應坐在NavigationControllerviewDidLoad功能:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Status bar white font 
     self.navigationBar.barStyle = UIBarStyle.Black 
     self.navigationBar.tintColor = UIColor.whiteColor() 
    } 
} 

要改變它每ViewController你就必須引用NavigationController從在ViewControllerviewWillAppear函數中寫出類似的行。

+0

如何覆蓋NavigationController以使用這些方法? – AG1 2014-09-24 04:54:23

+0

您不重寫NavigationController,只需在ViewDidLoad函數中對其進行修改即可。我上面更新了我的答案。 – Alex 2014-09-24 04:55:26

+1

那麼開發人員只需將NavigationController.swift添加到工作區?如果是那麼整潔! – AG1 2014-11-07 03:16:49

85

我喜歡Alex的回答。如果你想要快速嘗試在ViewController確保您使用

viewWillAppear() 
override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    var nav = self.navigationController?.navigationBar 
    nav?.barStyle = UIBarStyle.Black 
    nav?.tintColor = UIColor.white 
    nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange] 
} 

enter image description here

+1

我不工作,仍然顯示我在黑色 – 2014-11-05 15:51:53

+0

但我使用ISO 8.1 – 2014-11-05 15:52:44

+1

爲什麼viewWillAppear()?我在viewDidLoad中這樣做,它工作正常。 – 2015-07-12 13:29:28

16

Objective-C的工作,我必須把以下行在我的CustomViewController中的viewWillAppear

[self.navigationController.navigationBar setBarTintColor:[UIColor whiteColor]]; 
[self.navigationController.navigationBar setTranslucent:NO]; 

對於Swift2.x這個工程:

self.navigationController?.navigationBar.barTintColor = UIColor.redColor() 

對於Swift3.x這個工程:

self.navigationController?.navigationBar.barTintColor = UIColor.red 
+0

但是當我回到另一個視圖控制器時,顏色也發生了變化。任何想法如何防止這一點。我希望我的主視圖控制器是一種顏色,其他顏色。 – user3163404 2015-08-24 16:55:31

+1

我想你也必須在你的新視圖控制器中設置顏色。 – 2015-08-28 08:07:57

3

更新與SWIFT 3

override func viewDidLoad() { 
    super.viewDidLoad() 
     self.navigationController?.navigationBar.tintColor = UIColor.blue 
     self.navigationController?.navigationBar.barStyle = UIBarStyle.black 
} 
5

如果您想爲整個應用着色顏色和條顏色,下面的代碼可以被添加到AppDelegate.swift在

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 

    var navigationBarAppearace = UINavigationBar.appearance() 

    navigationBarAppearace.tintColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0) 
    navigationBarAppearace.barTintColor = UIColor(red:0.76, green:0.40, blue:0.40, alpha:1.0) 
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white] 
    return true 
` 

Navigation barTintColor and tintColor is set

6

要在故事板做好這項工作(界面Builder Inspector)

IBDesignable的幫助下,我們可以在Interface Builder Inspector中爲UINavigationController添加更多選項,並在故事板上調整它們。首先,將以下代碼添加到您的項目中。

@IBDesignable extension UINavigationController { 
    @IBInspectable var barTintColor: UIColor? { 
     set { 
      navigationBar.barTintColor = newValue 
     } 
     get { 
      guard let color = navigationBar.barTintColor else { return nil } 
      return color 
     } 
    } 

    @IBInspectable var tintColor: UIColor? { 
     set { 
      navigationBar.tintColor = newValue 
     } 
     get { 
      guard let color = navigationBar.tintColor else { return nil } 
      return color 
     } 
    } 

    @IBInspectable var titleColor: UIColor? { 
     set { 
      guard let color = newValue else { return } 
      navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: color] 
     } 
     get { 
      return navigationBar.titleTextAttributes?["NSForegroundColorAttributeName"] as? UIColor 
     } 
    } 
} 

然後只需在故事板上設置UINavigationController的屬性即可。

enter image description here

0

對於自定義顏色TitleTextNavigationBar,這裏夫特3簡單且短碼:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white] 

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName :UIColor.white] 
11

//在夫特4

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white] 
+1

我得到:Type'NSAttributedStringKey'(aka'NSString')沒有成員'foregroundColor' – Alfi 2017-12-10 12:39:40

2

斯威夫特4

override func viewDidLoad() { 
    super.viewDidLoad() 

    navigationController?.navigationBar.barTintColor = UIColor.orange 
    navigationController?.navigationBar.tintColor = UIColor.white 
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white] 
} 
0

雨燕4.1

添加FUNC按鍵viewDidLoad中

override func viewDidLoad() { 
    super.viewDidLoad() 

    setup() 
} 

setup()功能添加:

func setup() { 

     navigationController?.navigationBar.prefersLargeTitles = true 
     navigationController?.navigationBar.barStyle = .blackOpaque 
     navigationItem.title = "YOUR_TITLE_HERE" 
     navigationController?.navigationBar.barTintColor = .black 
     let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white] 
     navigationController?.navigationBar.largeTitleTextAttributes = attributes 
    } 
0

在斯威夫特3本作品:

navigationController?.navigationBar.barTintColor = UIColor.white 
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]