UINavigation Controller 集锦

UINavigation Controller

在控制器的类的比如 viewDidLoa() 方法里面添加如下代码 self 关键字不用加

  • 设置自定义样式标题 Title

      self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: UIFont(name: "Times new roman", size: 20)!]
    

NSAttributedString 传送门

  • 修改所在视图及下级视图的 navigationBar 背景颜色

      self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
    
  • 修改所在视图导航栏d 除标题外的 文字颜色

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

TintColor的设置会影响返回按钮标题、返回按钮图片、返回按钮图标

  • 修改下一视图的 返回按钮 的属性

      let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
      self.navigationItem.backBarButtonItem = backButton
    
  • 导航栏样式 barStyle (会影响标题的颜色)

        navigationController?.navigationBar.barStyle = .Black
        // 这个会导致navigationBar 变成黑色背景 
        // .Default 是白色背景黑色的字 还有顶部的运营商信息等文字颜色
    
  • 透明度 Translucent

      navigationController?.navigationBar.translucent = false 
    // 如果设置这个属性为 True, 同时设置了一个不透明的自定义背景图片,导航栏将使用一个小于1.0的系统不透明度给这个图片
    // 如果在设置这个属性为 False, 同时设置了一个透明的自定义背景图片,导航栏将会用给图片提供一个黑色不透明背景如果你使用了UIBarStyleBlack, 提供白色不透明背景如果使用了UIBarStyleDefault, 或者设置为barTintColor 如果这个值有被设置的话
    

简而言之,false关闭模糊效果,bar的颜色跟设置的一样。true的时候bar的背景颜色会由于透明不一样。 具体解决方法讨论

封装函数

 func setNavigationControllerBar(navigationController: UINavigationController, barColor: UIColor, title: String, titleColor: UIColor = UIColor.whiteColor(), titleAttributes: [String: AnyObject] = [:]) {

    navigationController.navigationBar.barStyle = .Black // 黑底白字 包括运营商信息那一栏
    navigationController.navigationBar.barTintColor = barColor
    navigationController.navigationBar.tintColor = titleColor
    navigationItem.title = title
    navigationController.navigationBar.titleTextAttributes = titleAttributes
    if navigationController.navigationBar.titleTextAttributes![NSForegroundColorAttributeName] == nil {
        navigationController.navigationBar.titleTextAttributes![NSForegroundColorAttributeName] = titleColor
    }

    
 }

 func setBackButtonItem(navgationItem: UINavigationItem, title: String) {
    let backButton = UIBarButtonItem(title: title, style: .Plain, target: nil, action:  nil)
    navigationItem.backBarButtonItem = backButton

 }

调用实例

 override func viewDidLoad() {
    super.viewDidLoad()
    setNavigationControllerBar(self.navigationController!, barColor: UIColor.redColor(), title: "MainView",titleAttributes: [NSForegroundColorAttributeName: UIColor.purpleColor(), NSFontAttributeName: UIFont(name: "Times new roman", size: 20)!])
    setBackButtonItem(self.navigationItem, title: "Back")
 }

In iOS 7, a navigation bar’s tintColor affects the color of the back indicator image, button titles, and button images. The barTintColor property affects the color of the bar itself. Additionally, navigation bars are translucent by default. Turning the translucency off or on does not affect buttons, since they do not have backgrounds.

推荐阅读更多精彩内容