RootNavigationController.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. //
  2. // RootNavigationController.swift
  3. // SolarStationSwift
  4. //
  5. // Created by weclouds on 2018/8/8.
  6. // Copyright © 2018年 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. class RootNavigationController: UINavigationController {
  10. var callback : (()->Void)? // 回调函数
  11. var navTitle: String?
  12. override func viewDidLoad() {
  13. super.viewDidLoad()
  14. setNavigationBar()
  15. // Do any additional setup after loading the view.
  16. }
  17. func setNavigationBar() {
  18. let apperance = UINavigationBar.appearance()
  19. // //设置半透明效果
  20. self.navigationBar.isTranslucent = false
  21. //将导航栏上按钮颜色
  22. apperance.tintColor = UIColor(hexString: "222222")
  23. //消除分割线
  24. navigationBar.setBackgroundImage(UIImage(), for: .default)
  25. navigationBar.shadowImage = navBarShadowImage()
  26. //navigationBar.isHidden = true
  27. let dict:NSDictionary = [NSAttributedString.Key.foregroundColor: UIColor(hexString: "#222222"),NSAttributedString.Key.font : UIFont(name: PingFangSC_Semibold, size: 19)]
  28. //标题颜色
  29. navigationBar.titleTextAttributes = dict as? [NSAttributedString.Key : AnyObject]
  30. // //设置导航栏title格式
  31. let backAppearance = UIBarButtonItem.appearance()
  32. //设置导航栏返回按钮
  33. if #available(iOS 11, *){
  34. backAppearance.setBackButtonTitlePositionAdjustment(UIOffset(horizontal: -200, vertical: 0), for: UIBarMetrics.default)
  35. let backButtonImage = UIImage(named: "fanhui")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
  36. apperance.backIndicatorImage = backButtonImage
  37. apperance.backIndicatorTransitionMaskImage = backButtonImage
  38. }else {
  39. //返回按钮没有文字
  40. backAppearance.setBackButtonTitlePositionAdjustment(UIOffset(horizontal: -200, vertical: 0), for: UIBarMetrics.default)
  41. let backButtonImage = UIImage(named: "fanhui")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
  42. backAppearance.setBackButtonBackgroundImage(backButtonImage?.resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 32, bottom: 0, right: 0)), for: UIControl.State.normal, barMetrics: UIBarMetrics.default)
  43. }
  44. }
  45. override func didReceiveMemoryWarning() {
  46. super.didReceiveMemoryWarning()
  47. // Dispose of any resources that can be recreated.
  48. }
  49. override func pushViewController(_ viewController: UIViewController, animated: Bool) {
  50. if self.viewControllers.count > 0 {
  51. viewController.hidesBottomBarWhenPushed = true
  52. viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItem.Style.plain, target: self, action: #selector(RootNavigationController.backAction ))
  53. }
  54. super.pushViewController(viewController, animated: animated)
  55. }
  56. @objc func backAction() {
  57. log.debug("当前控制器 \(self.topViewController))")
  58. // if self.topViewController == sbtup
  59. let detailVC = SBTDeviceDetaiVCtr()
  60. if self.topViewController == detailVC{
  61. if callback != nil{
  62. callback!()
  63. }
  64. }
  65. self.navigationController?.popViewController(animated: true)
  66. }
  67. func navBarShadowImage() -> UIImage? {
  68. UIGraphicsBeginImageContextWithOptions(CGSize(width: KSCREENWIDTH, height: 0.5), false, 0)
  69. //画线
  70. let path = UIBezierPath(rect: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: 0.5))
  71. UIColor.white.setFill()//NavigationBar分割线颜色
  72. path.fill()
  73. let image = UIGraphicsGetImageFromCurrentImageContext()
  74. UIGraphicsEndImageContext()
  75. return image
  76. }
  77. }