前言
最近在學習swift,順便把之前寫的一個導航欄庫GKNavigationBar更新了swift版本,在這里記錄一下
框架特性
- 無侵入性,低耦合性
- 支持自定義導航欄樣式(隱藏、透明等)
- 支持控制器開關返回手勢
- 支持控制器開關全屏返回手勢
- 支持設置側滑手勢與屏幕左邊的距離
- 支持控制器設置導航欄透明度,可實現(xiàn)漸變效果
- 完美解決UITableView,UIScrollView滑動手勢沖突
- 可實現(xiàn)push,pop時控制器縮放效果(如:今日頭條)
- 可實現(xiàn)左滑push一個控制器的效果(如:網(wǎng)易新聞)
說明
1、swift是一門靜態(tài)語音,沒有運行時的特性。但是由于swift可以和OC混編,可以互相調(diào)用各自的方法和類,因此swift可以通過調(diào)用OC的方法間接擁有了運行時的特性。GKNavigationBarSwift就是通過運行時的方式為控制器添加自定義導航欄及屬性的。
2、initialize方法在swift中已經(jīng)不能使用,通過百度找到了下面的解決方法
// 定義Awake協(xié)議,讓需要重寫系統(tǒng)方法的類實現(xiàn)該協(xié)議
public protocol GKAwakeProtocol: class {
static func gkAwake()
}
class NothingToSeeHere {
static func harmlessFunction() {
UIViewController.gkAwake()
}
}
// 讓APP啟動時只執(zhí)行一次harmlessFunction 方法
extension UIApplication {
private static let runOnce: Void = { // 使用靜態(tài)屬性以保證只調(diào)用一次(該屬性是個方法)
NothingToSeeHere.harmlessFunction()
}()
open override var next: UIResponder? { // 重新next屬性
UIApplication.runOnce
return super.next
}
}
但是在Xcode 11.4中,在調(diào)試時UIApplication的next屬性不會調(diào)用,所以提供了下面的方法,你只需要在程序啟動的時候調(diào)用即可
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
GKConfigure.awake()
return true
}
3、如果你想要動態(tài)改變狀態(tài)欄樣式,需要在基類控制器中實現(xiàn)下面的兩個方法
override var prefersStatusBarHidden: Bool {
return self.gk_statusBarHidden
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return self.gk_statusBarStyle
}
效果圖

demo.png
具體的效果需要自己下載demo體驗
最后
框架及demo地址:GKNavigationBarSwift,如果有需要的話可以下載查看,順便點個star。您的支持是對作者最大的鼓勵!