更改导航栏中“后退”按钮的颜色

时间:2015-02-26 03:27:20

标签: ios swift uinavigationbar uibarbuttonitem backbarbuttonitem

我正在尝试将“设置”按钮的颜色更改为白色,但无法将其更改。

我尝试过这两种方法:

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

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

enter image description here

如何将该按钮设为白色?

28 个答案:

答案 0 :(得分:220)

您可以通过单击电路板上的空白区域并在右侧工具栏中选择"显示文件检查器"来更改故事板中的全局色调颜色,您将在工具栏的底部看到" Global Tint"选项。

Global Tint option in storyboard

答案 1 :(得分:161)

此代码更改箭头颜色

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 =

答案 2 :(得分:84)

在故事板中设置非常简单:

enter image description here

enter image description here

答案 3 :(得分:43)

你应该用这个:

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

答案 4 :(得分:18)

你可以像这样使用。将其放在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
    }

答案 5 :(得分:16)

夫特

 override func viewDidLoad() {
     super.viewDidLoad()

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

答案 6 :(得分:14)

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

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

答案 7 :(得分:13)

在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

答案 8 :(得分:11)

Swift 4.2

更改完整的应用主题

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

        UINavigationBar.appearance().tintColor = .white

        return true
    }

更改特定控制器

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

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

答案 9 :(得分:6)

AppDelegate内的didFinishLaunchingWithOptions课程中使用此代码。

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

UINavigationBar.appearance().tintColor = .white

}

答案 10 :(得分:6)

Swift 3

对于Swift 3,最受欢迎的答案是不正确的。

enter image description here

更改颜色的正确代码是:

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

如果要更改颜色,请将上面的UIColor.white更改为所需的颜色

答案 11 :(得分:5)

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

这个片段带来了魔力。而不是redColor,将其更改为您的愿望。

答案 12 :(得分:4)

在swift 2.0中使用

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

答案 13 :(得分:4)

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

  

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属性不是来自tintColor的继承UIView

不幸的是,UIBarButtonItem.tintColor未注明UI_APPEARANCE_SELECTOR - 但在我看来这是一个文档错误。 Apple Engineering在this radar中的回复表明它得到了支持。

答案 14 :(得分:4)

如果您已经在"设置"中有后退按钮查看控制器,您想要更改"支付信息"查看控制器到其他东西,你可以在里面做"设置"查看控制器为这样的segue做准备:

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               
    }
}

答案 15 :(得分:4)

让我们试试这段代码:

 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
}

答案 16 :(得分:3)

将以下代码添加到 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()]

答案 17 :(得分:3)

    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

答案 18 :(得分:2)

对于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
}

答案 19 :(得分:2)

self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

这适用于我,iOS 9.0 +

答案 20 :(得分:1)

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

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

答案 21 :(得分:0)

不确定为什么没有人提到过这个...但我正在做我正在做的 viewDidLoad ...而且它无法正常工作。然后我将代码放入 viewWillAppear ,这一切都有效。

上述解决方案是更改单个 barbuttonItem。如果您想更改代码中每个 navigationBar的颜色,请按照implementation

使用appearance()基本上改变类本身就像在应用程序中对该视图的所有实例进行全局更改。有关详情,请参阅this answer

答案 22 :(得分:0)

你有一个选择隐藏你的后退按钮,并与你自己。 然后设置它的颜色。

我做到了:

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

答案 23 :(得分:0)

将在 - (void)viewDidLoad:

中使用此行解决
self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;

答案 24 :(得分:0)

您应该添加此行

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

答案 25 :(得分:0)

我更喜欢自定义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 EKEventEditViewController , PickerViewController 之类的Apple Api那样混乱。 >

答案 26 :(得分:0)

Swift 5.3:

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

答案 27 :(得分:0)

如果您尝试了很多次却无法正常工作,则可以尝试:

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

实际上,我尝试了很多次,只是发现这种方式有效。