改变导航栏后退按钮的颜色

我试图改变设置按钮的颜色为白色,但不能让它改变。

这两种方法我都试过:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

但没有变化,它看起来仍然是这样的:

enter image description here

我怎么把那个按钮变成白色?

218977 次浏览

你应该这样使用:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

这段代码更改箭头的颜色

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

如果这不起作用,请使用下面的代码:

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

Swift 3 Notes

UIColor.whiteColor()和类似的被简化为UIColor.white

此外,许多以前的隐式可选项已被更改为显式,因此您可能需要:

self.navigationController?.navigationBar =

将以下代码添加到AppDelegate.swift中的didFinishLaunchingWithOptions函数

var navigationBarAppearace = UINavigationBar.appearance()


navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade


// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

这段代码具有魔力。而不是红色,改变它作为你的愿望。

你可以通过点击storyboard上的空白区域并在右边的工具栏中选择“Show the file inspector”来改变全局色调,你会在工具栏的底部看到“global tint”选项。

Global Tint option in storyboard

你可以用这个。把它放在AppDelegate.swift里面。

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


UINavigationBar.appearance().translucent = false
UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]


return true
}

对于Swift 2.0,要更改已更改的导航栏颜色标题文本后退按钮色调颜色,请使用AppDelegate.swift中的以下命令

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {


// Override point for customization after application launch.




//Navigation bar tint color change


UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)


//Back button tint color change


UINavigationBar.appearance().barStyle = UIBarStyle.Default
UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)


//Navigation Menu font tint color change


UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)


UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent




return true
}

让我们试试这段代码:

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


let navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color


self.window?.backgroundColor = UIColor.whiteColor()
return true
}
你只有一个选择把你的后退按钮藏起来,用你自己来做。

我这样做了:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()

在swift 2.0使用中

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

这适用于我,iOS 9.0+

在故事板中很容易设置:

enter image description here

enter image description here

Swift3中,将后退按钮设置为red

self.navigationController?.navigationBar.tintColor = UIColor.red

斯威夫特3

被点赞最多的答案是Swift 3不正确。

enter image description here

改变颜色的正确代码是:

self.navigationController?.navigationBar.tintColor = UIColor.white

如果你想改变颜色,改变UIColor。白色以上到所需的颜色

AppDelegate类中使用此代码,位于didFinishLaunchingWithOptions内部。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {


UINavigationBar.appearance().tintColor = .white


}

不知道为什么没有人提到这一点…但我做的和你在我的viewDidLoad里做的一模一样…但它并没有起作用。然后我把我的代码放入viewWillAppear,它都工作了。

上面的解决方案是改变 barbuttonItem。如果你想在你的代码中改变每一个 navigationBar的颜色,那么遵循这个答案

基本上,使用appearance()更改到类本身就像在应用程序中对该视图的所有实例进行全局更改。有关更多信息,请参阅在这里

斯威夫特

 override func viewDidLoad() {
super.viewDidLoad()


self.navigationController?.navigationBar.tintColor = UIColor.white
}

如果你在Settings视图控制器中已经有了后退按钮,你想改变Payment Information视图控制器上后退按钮的颜色为其他颜色,你可以在Settings视图控制器的prepareforsegue中这样做:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "YourPaymentInformationSegue"
{
//Make the back button for "Payment Information" gray:
self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray
}
}

在Swift 4中,你可以使用以下方法来解决这个问题:

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black

所有设置UINavigationBar.appearance().tintColor的答案都与Apple在UIAppearance.h中的文档冲突。

iOS7注意:在iOS7上,tintColor属性已经移动到UIView,现在具有特殊的继承行为,在UIView.h中描述。 这种继承的行为可能与外观代理冲突,因此tintColor现在在外观代理中是不允许的

在Xcode中,你需要命令-点击你想要使用外观代理的每个属性来检查头文件,并确保该属性带有UI_APPEARANCE_SELECTOR注释。

因此,通过外观代理将导航栏染成紫色,标题和按钮染成白色的正确方法是:

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white

注意,UIBarButtonItem不是UIView的子类,而是NSObject。所以它的tintColor属性不是从UIView继承的tintColor

不幸的是,UIBarButtonItem.tintColor没有用UI_APPEARANCE_SELECTOR注释——但在我看来,这似乎是一个文档错误。Apple Engineering在该雷达中的响应表示支持。

它将通过-(void)viewDidLoad中的这一行来解决:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;

斯威夫特5.5

更改完整的应用程序主题

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Set for app
UINavigationBar.appearance().tintColor = .white
return true
}

更改特定控制器

let navController = UINavigationController.init(rootViewController: yourViewController)
navController.navigationBar.tintColor = .red


present(navController, animated: true, completion: nil)

你应该加上这一行

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

我更喜欢自定义NavigationController而不是设置全局ui,或者放在ViewController中。

这是我的解决方案


class AppNavigationController : UINavigationController {


override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}


override func viewWillAppear(_ animated: Bool) {


}


}
extension AppNavigationController : UINavigationControllerDelegate {


func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
let backButtonItem = UIBarButtonItem(
title: "   ",
style: UIBarButtonItem.Style.plain,
target: nil,
action: nil)
backButtonItem.tintColor = UIColor.gray
viewController.navigationItem.backBarButtonItem = backButtonItem
}


func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {


}


}


另外,如果你使用像UIBarButtonItem.appearance().tintColor = .white这样的全局设置ui,你不需要像EKEventEditViewControllerPickerViewController这样的苹果Api

    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation
self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color

斯威夫特5.3:

UINavigationBar.appearance().backIndicatorImage = UIImage(named: "custom-back-image")
UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named: "custom-back-image")

如果你试了很多次都没有成功,你可以试试:

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .red

其实,我试了很多次,才发现这种方法行得通。

我在swift 5中使用它,并为我工作

navigationItem.backBarButtonItem?.tintColor = UIColor(named: "uberRed")

Swift 5更新

如果你需要全局设置Back按钮颜色,你可以简单地使用:

UIBarButtonItem.appearance().tintColor = Asset.pureWhite.color

然后你不需要在每个视图控制器上设置后退按钮的背景色。如果你使用这个,你不能在另一个视图控制器上设置后退按钮的颜色

如果您需要在视图控制器上设置后退按钮颜色或在另一个视图控制器上更改,请不要使用上述方法。你可以用:

let appearance = UINavigationBarAppearance()
appearance.titleTextAttributes = [.font:FontFamily.BatonTurbo.medium.font(size: 20),
.foregroundColor: Asset.pureWhite.color] // Naviagtion Title attributes
appearance.backgroundColor = .red // Navigation bar background color


self.navigationItem.standardAppearance = appearance
self.navigationItem.scrollEdgeAppearance = appearance
self.navigationItem.compactAppearance = appearance


navigationController?.navigationBar.tintColor = .green // Back button color

出于某种原因,它在编程上不适合我。但是,在故事板中设置它每次都有效。

enter image description here