fix
杨锴
2025-05-06 fdb1d18a0b4b941b986d55f66c589e29836494eb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//
//  BaseNavigationController.swift
//  BrokerDriver
//
//  Created by 无故事王国 on 2023/4/24.
//
 
import UIKit
import JQTools
 
class BaseNav: UINavigationController,UINavigationControllerDelegate {
 
                /// 需要透明Nav的VC
                private var lucencyVCs = [HomeVC.self,LoginVC.self,CommonWebVC.self]
 
                private let img = UIImage.jq_gradient(["#B6E0FF","#FFFFFF"],size: CGSize(width: JQ_ScreenW, height: 90),direction: GradientDirection.vertical)
 
                open override func viewDidLoad() {
                                super.viewDidLoad()
                                self.navigationBar.barTintColor = .white
                                self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.white]
                                self.navigationBar.tintColor = UIColor.black
                                self.navigationBar.shadowImage = UIImage()
                                self.navigationBar.isTranslucent = true
                                self.delegate = self
                                self.interactivePopGestureRecognizer?.delegate = self
 
 
                                if #available(iOS 15.0, *) {
                                                let scrollBar = UINavigationBarAppearance()
                                                scrollBar.configureWithOpaqueBackground()
                                                scrollBar.backgroundEffect = nil
                                                scrollBar.shadowColor = nil
                                                scrollBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Config.NavFont]
                                                scrollBar.backgroundColor = UIColor.clear
                                                scrollBar.backgroundImage = img
 
                                                let standardBar = UINavigationBarAppearance()
                                                standardBar.configureWithOpaqueBackground()
                                                standardBar.backgroundEffect = nil
                                                standardBar.shadowColor = nil
                                                standardBar.shadowImage = nil
                                                standardBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Config.NavFont]
                                                standardBar.backgroundColor = UIColor.clear
                                                standardBar.backgroundImage = img
                                                navigationBar.scrollEdgeAppearance = scrollBar //顶部透明
                                                navigationBar.standardAppearance = standardBar
                                }else {
                                                navigationBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Config.NavFont]
                                                navigationBar.isTranslucent = true
                                                navigationBar.setBackgroundImage(UIImage(), for: .default)
                                                navigationBar.shadowImage = UIImage()
                                }
                }
 
                open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
 
 
                                let status = lucencyVCs.contains(where: {$0 == viewController.classForCoder})
                                if (status){
                                                if #available(iOS 15.0, *) {
                                                                navigationBar.standardAppearance.backgroundImage = nil
                                                                navigationBar.scrollEdgeAppearance?.backgroundImage = nil
                                                }else{
                                                                navigationBar.setBackgroundImage(UIImage(), for: .default)
                                                                navigationBar.shadowImage = UIImage()
                                                }
                                }else{
                                                if #available(iOS 15.0, *) {
                                                                navigationBar.standardAppearance.backgroundImage = img
                                                                navigationBar.scrollEdgeAppearance?.backgroundImage = img
                                                }else{
                                                                navigationBar.setBackgroundImage(img, for: .default)
                                                }
                                }
                }
 
                //侧滑
                public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
                                if  viewController == self.viewControllers[0] {
                                                self.interactivePopGestureRecognizer!.delegate = self
                                }else{
                                                self.interactivePopGestureRecognizer!.delegate = nil
                                }
                }
 
                open override var childForStatusBarHidden: UIViewController? {
                                return self.topViewController
                }
 
                open override var childForStatusBarStyle: UIViewController? {
                                return self.topViewController
                }
 
                override var preferredStatusBarStyle: UIStatusBarStyle{
                                return .lightContent
                }
}