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


192

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

我已经尝试过这两个:

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

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

在此处输入图片说明

如何使该按钮变白?

Answers:


283

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

情节提要中的“全局色调”选项


7
哇。。很好找到!您知道如何以编程方式执行此操作吗?
Paul Lehn 2015年

10
很好的发现,但是将全局色彩更改为白色(根据原始问题)也会将诸如表视图详细信息显示指示器之类的内容更改为白色,这将使它们在相关表中不可见。
Mike Fischer

1
加上Mike的问题:此控件还使您所有的文本按钮都变为该颜色,因此您要么必须将它们手动设置为一种颜色(即显然没有默认颜色),要么仅使用其他方法即可。
Sirens'7

4
尽管这是一种快速简便的解决方法,但是如果颜色为白色/与背景匹配,则会导致其他问题。如果您有文本字段,它会使光标不明显,这使用户看起来像是因为看不见光标而无法在文本字段上书写。
何塞·拉米雷斯

5
@PaulLehn要以编程方式执行此操作,AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)请输入以下内容:self.window!.tintColor = .yourColor
mmika1000 '19

205

此代码更改箭头颜色

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

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

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

斯威夫特3笔记

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

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

self.navigationController?.navigationBar =

7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()为我工作(Swift 2.2)
Mike Fischer

self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor()为我工作(Swift 3)
Ajay.km

您能解释为什么使用UIBarStyle.Black吗?
mmika1000

请更新:self.navigationController?.navigationBar.tintColor =
mohonish

1
它只更改箭头,返回文本在Xcode 11中仍然保持不变
jeff ayan


55

您应该使用此:

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

这使按钮变为白色,但使背景颜色变浅了。您知道如何再次将条形背景赋予全彩吗?
布兰登·埃文斯

这是正确的答案。通过将barTintColor和title / bar按钮设置为白色,它将使条形变为紫色。
zirinisp

35

迅速

 override func viewDidLoad() {
     super.viewDidLoad()

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

1
在使用SWIFT 3
迪派Tagadiya

还告诉我您可以使用哪个快速版本?
Deepak Tagadiya

以及哪个类/文件/ vc在项目中编写此代码?
Deepak Tagadiya

在函数setCloseButton()的开头,该函数在viewWillAppear上调用。
Jayprakash Dubey

写在NextViewController.swift文件中,也写在viewDidLoad()中。
Deepak Tagadiya

20

您可以像这样使用。放进去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
    }

20

斯威夫特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)

它会更改所有应用程序的颜色。如果我需要针对特定​​屏幕/特定屏幕进行更改UINavigationController怎么办?
Vyachaslav Gerchicov

如果您要更改特定的控制器,则以上答案的@VyachaslavGerchicov适用于完整的应用程序主题。做这样的事情:让navController = UINavigationController.init(rootViewController:yourViewController)navController.navigationBar.tintColor =
.red

如果您使用的是iOS 13,则不再使用didFinishLaunchingWithOptions,它将移至SceneDelegate。
JBarros35

15

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

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

这将设置导航栏,而不是导航栏按钮项
carlodonz 18-2-28

1
是的,这就是问题。
文森特

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

这是唯一对我有用的方法。Apple的实施目前似乎有些问题……
Dave Y

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

迅捷3

最受支持的答案不适用于Swift 3。

在此处输入图片说明

更改颜色的正确代码是:

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

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


这是唯一对我有用的方法。Apple的实施目前似乎有些问题……
Dave Y

7

设置的所有答案都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属性不是从继承tintColorUIView

不幸的是,UIBarButtonItem.tintColor没有注释UI_APPEARANCE_SELECTOR-但这在我看来是一个文档错误。Apple Engineering在此雷达中的响应表明它得到了支持。


UINavigationBar.appearance()。largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white] //也
Guilherme,


6

在中的AppDelegate类中使用此代码didFinishLaunchingWithOptions

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

UINavigationBar.appearance().tintColor = .white

}

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
}

非常感谢您,先生
Arpit乙Parekh的


4

如果您已经在“设置”视图控制器中具有后退按钮,并且想要将“付款信息”视图控制器上的后退按钮颜色更改为其他颜色,则可以在“设置”视图控制器的这种准备中进行操作:

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

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

这适用于我,iOS 9.0+


2

下面的代码添加到didFinishLaunchingWithOptions函数AppDelegate.swift

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

此代码给我以下错误:“使用未解析的标识符'uicolorFromHex'”有人可以帮助我解决该问题吗?
jonathan3087

可能是UIColor的扩展。您可以搜索stackoverflow如何创建扩展。
KvdLingen

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
}

2

不知道为什么没有人提到这件事...但是我确实在做我在做viewDidLoad...的事情,但是没有用。然后,我将代码放入其中viewWillAppear,并且一切正常。

上面的解决方案是更改单个 barbuttonItem。如果要更改代码中每个 navigationBar 的颜色,请遵循此答案

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


1

您可以选择隐藏后退按钮,并随身携带。然后设置其颜色。

我做到了:

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

1
该问题专门围绕样式设置左侧导航项,这与直接回答该问题最接近。
工艺

0

将在-(void)viewDidLoad中使用以下行解决:

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

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro


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

  }

}

另外,如果您使用ui这样的全局设置,也不需要像EKEventEditViewControllerPickerViewController之类的Apple Api那样混乱UIBarButtonItem.appearance().tintColor = .white


0
    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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.