【问题标题】:Swift change font and color of back button快速更改后退按钮的字体和颜色
【发布时间】:2016-05-19 09:28:01
【问题描述】:

我正在使用 Swift 2.2 开发应用程序。现在我想更改某个视图的后退按钮字体和颜色。有问题的视图有一个导航控制器,因为它是父控制器。

我尝试在 ViewController 的 viewDidLoad 中运行以下两行

self.navigationController!.navigationItem.backBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)
self.navigationItem.backBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)

两者都不会引发任何错误,但对后退按钮没有任何影响。我也尝试过运行这两个

self.navigationController!.navigationItem.leftBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)   
self.navigationItem.leftBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)

然而,这会引发错误(错误展开 nil)。我应该如何正确更改导航栏后退按钮的字体和颜色?感觉好像我没有修改正确的项目...

【问题讨论】:

  • viewWillAppear: 方法中设置您的navigationBar 的tintColor 并在viewWillDisappear: 方法中重新设置
  • 如果你想在整个应用中生效,请使用 appdelegate didFinishLaunchingWithOptions 中的代码

标签: ios swift swift2 uinavigationbar


【解决方案1】:

如果您想为条形按钮隐式设置相同的颜色,请在您的AppDelegate 中,在didfinishlaunchingwithoptions 中写入:

 UINavigationBar.appearance().tintColor = UIColor.white //your desired color here

更新:

把这个放到AppDelegate

 UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal) // your textattributes here

更新 2:

  UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UINavigationBar.classForCoder()]).setTitleTextAttributes(["attribute" : "value"], forState: .Normal)

希望这会有所帮助:)

【讨论】:

  • 是的,这似乎工作正常,谢谢!我也想全局设置字体,但它似乎只影响标题字体,而不是后退按钮字体......有什么想法吗?
  • 这就是我所做的,但它只影响导航栏标题,而不影响后退按钮:(
【解决方案2】:

Swift 3.0 答案(基于 Lion 的答案):

let newFont = UIFont(name: "Avenir Next", size: 16.0)!
let color = UIColor.white

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.classForCoder() as! UIAppearanceContainer.Type]).setTitleTextAttributes([NSForegroundColorAttributeName: color, NSFontAttributeName: newFont], for: .normal)

对于那些已经设法自定义导航栏其他部分但没有后退按钮的人来说,这是一种享受!

【讨论】:

    【解决方案3】:

    我认为您应该在实际 vc 之前在 vc 中更改它。看:UINavigationItem

    编辑: 例如你可以写:

    let item = UIBarButtonItem(title: "Text goes here", style: .Plain, target: self, action: #selector(self.navigationController?.popViewControllerAnimated(_:)))
    
    item.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Helvetica-Bold", size: 23)!], forState: .Normal)
    
    navigationItem.backBarButtonItem = item
    

    在您的 prepareForSegue 方法中。

    【讨论】:

    • 您能否更清楚、更详细地解释您提出的解决方案?
    【解决方案4】:

    斯威夫特 4

    在 AppDelegate.swift 中

    UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 15)!], for: .normal)
    

    【讨论】:

      【解决方案5】:

      在 Swift 4.2 中

      to change back button color
      self.navigationController?.navigationBar.tintColor = .white
      

      【讨论】:

        【解决方案6】:

        创建自定义按钮并根据需要进行设置并添加操作以返回。

        func addBackBarButtonOnNavigationBar(){
           // add image here
            let searchImage:UIImage = UIImage(named: "back button image")!
        
             var backBtn:UIBarButtonItem = UIBarButtonItem(image: searchImage,  style: UIBarButtonItemStyle.Plain, target: self, action: #selector(classname.buttonActionMethodName(_:)))
            backBtn.tintColor = UIColor.lightGrayColor()
          if let font = UIFont(name: "AvenirNext", size: 15) {
            backBtn.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal)
        }
            self.navigationItem.leftBarButtonItem = backBtn
        
        }
        
        func buttonActionMethodName(){
          self.navigationController!.popViewControllerAnimated(true)
        
        }
        

        【讨论】:

          【解决方案7】:

          使用以下代码:

              navigationController?.navigationBar.barTintColor = UIColor.purpleColor()
              navigationController?.navigationBar.tintColor = UIColor.whiteColor()
          

          根据需要改变颜色

          【讨论】:

          • 我试过了,但没有任何区别:(
          • 这适用于我的主控制器,但不适用于我的详细控制器。怎么可能?
          • 在 didFinishLaunchingWithOptions 的 AppDelegate.m 文件中使用此代码,它肯定适合您
          【解决方案8】:

          Swift 5 中,您可以通过以下方式做到这一点:

              self.navigationItem.backBarButtonItem?.tintColor = UIColor.red
              let attributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 17, weight: .regular)]
              self.navigationItem.backBarButtonItem?.setTitleTextAttributes(attributes, for: .normal)
          

          请注意,它对下一个推送的视图控制器而不是当前显示的视图控制器有效,这就是为什么它非常混乱!

          另外,检查情节提要并选择 previous 视图控制器的导航项,然后在 Back Button(Inspector)中输入一些内容。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多