在不同屏幕上更改导航栏颜色和标题颜色

时间:2018-06-27 10:22:14

标签: ios swift uinavigationcontroller navigation uinavigationbar

在我的iPhone应用程序中,我有两种NavigationC0ntroller背景色和标题色

  1. 白色背景+红色标题
  2. 透明背景+白色标题

我正在使用以下通用代码来更改背景颜色和标题颜色

@objc class Helper : NSObject{
class func restNavigationBarWithNavigationController(navigationController : UINavigationController , withColor : UIColor,isTranslucent : Bool )
{
    navigationController.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController.navigationBar.shadowImage = UIImage()
    navigationController.navigationBar.isTranslucent = isTranslucent
    navigationController.view.backgroundColor = withColor
    navigationController.navigationBar.backgroundColor = withColor
}
}

我正在上面的视图控制器的viewdidload和ViewWIllAppear中调用

self.navigationController?.navigationBar.tintColor = .white

Helper.restNavigationBarWithNavigationController(navigationController: 
self.navigationController!, withColor: .clear, isTranslucent: true)

但是如果我将屏幕从白色显示为红色标题,反之亦然,则上述代码不起作用。

请让我知道我在做什么错。

任何想法或建议都很棒。 (仅供参考:我在Objective-c ViewController中使用相同的代码库)

2 个答案:

答案 0 :(得分:3)

好吧,如果要在每个屏幕中更改导航栏样式,可以使用以下代码:

class FirstViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // White color Background + Red Color Title
        navigationController.navigationBar.barTintColor = .white
        navigationController.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.red]
    }
}

//下一步

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Clear color Background + White color title
        navigationController.navigationBar.barTintColor = .clear
        navigationController.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    }
}

这在Swift 4中有效

答案 1 :(得分:1)

Swift 5将NSAttributedStringKey类型分离为NSAttributedString.Key,其用法如下(Swift 5.1.3)。

func configureNavigationBar() {
      navigationController?.navigationBar.barTintColor = .darkGray
      navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
 }