iOS - 自定義導航欄GKNavigationBar的Swift版本

前言

最近在學習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。您的支持是對作者最大的鼓勵!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 深夜,便覺得越發(fā)孤獨 沒有原因,沒有頭緒 或許人人如此 或許僅我一人 我渴望著的不屬于我 我期待著的望不到影子
    大海里的守林人閱讀 417評論 3 0
  • ‘亞軍,吃飯’,現(xiàn)在的我,由于媽媽上班和我順路,每天早上被媽媽叫醒吃飯已成為一種常態(tài)。 盡管今天是...
    堅持讀書的馮亞軍閱讀 380評論 1 2
  • 每個人都希望自己能夠精神百倍、全情投入,然而當工作和生活的重擔超出我們的能力時,我們不得不采取權宜之計,倉促行事。...
    鐠月閱讀 406評論 0 1
  • 今天早上起床后,兩個孩子很自覺的在那兒開始看書。兩個孩子給他自己安排的挺好。往常,我都是在不停的在說看書看書,但是...
    可樂開心閱讀 320評論 0 3
  • 由于沒有抑制住自己多事的沖動,我就說:“呀,咱們是老鄉(xiāng)呢。”那年輕男子一聽,立即兩眼放光?!鞍パ剑蹅兪抢相l(xiāng)啊,你...
    饒水伊人閱讀 229評論 0 3

友情鏈接更多精彩內(nèi)容