UINavigationController+GKExtension.swift
1.7 KB
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
//
// UINavigationController+GKExtension.swift
// GKNavigationBarSwift
//
// Created by QuintGao on 2020/3/25.
// Copyright © 2020 QuintGao. All rights reserved.
//
import UIKit
extension UINavigationController: GKChildAwakeProtocol {
// MARK: - 重新系统方法
private static let onceToken = UUID().uuidString
public static func gkChildAwake() {
DispatchQueue.once(token: onceToken) {
gk_swizzled_instanceMethod("gkNav", oldClass: self, oldSelector: "pushViewController:animated:", newClass: self)
}
}
@objc func gkNav_pushViewController(_ viewController: UIViewController, animated: Bool) {
if self.gk_openSystemNavHandle {
self.isNavigationBarHidden = true
}
gkNav_pushViewController(viewController, animated: animated)
}
}
extension UINavigationController {
fileprivate struct AssociatedKeys {
static var gkOpenSystemNavHandle: Void?
static var gkHideNavigationBar: Void?
}
public var gk_openSystemNavHandle: Bool {
get {
guard let obj = gk_getAssociatedObject(self, &AssociatedKeys.gkOpenSystemNavHandle) as? Bool else { return false }
return obj
}
set {
gk_setAssociatedObject(self, &AssociatedKeys.gkOpenSystemNavHandle, newValue)
}
}
public var gk_hideNavigationBar: Bool {
get {
guard let obj = gk_getAssociatedObject(self, &AssociatedKeys.gkHideNavigationBar) as? Bool else { return false }
return obj
}
set {
gk_setAssociatedObject(self, &AssociatedKeys.gkHideNavigationBar, newValue)
}
}
}