Swift 全局默認導航欄樣式與視圖控制器自定義并存

介紹

越來越多的應用程序在擁有全局導航欄樣式的同時,也要求每個視圖控制器自定義導航欄樣式。
YDRootNavigationController 這個項目就是幫助開發(fā)者以高效的方式解決這個問題,開發(fā)者以簡單的方式使用這個導航控制器,就像視圖控制器獨立設置狀態(tài)欄風格一樣,并且您可以為每個視圖控制器提供單獨的導航欄樣式,包括原生返回手勢、返回按鈕、狀態(tài)欄樣式、標簽欄顯示和隱藏狀態(tài)等等??梢圆榭催@篇 Swift YDRootNavigationController的實現(xiàn)原理 文章進行深入了解。

返回手勢與地圖.gif

概覽

  • 支持設置全局統(tǒng)一默認的導航欄樣式(例如:導航欄背景顏色、底部分割線顏色、標題文字屬性),同時支持每個視圖控制器可以自定義導航欄樣式
  • 支持全局默認設置是否開啟原生的返回手勢,同時支持視圖控制器自己默認設置和動態(tài)設置
  • 支持全局默認設置是否開啟全屏返回手勢,同時支持視圖控制器自己默認設置和動態(tài)設置
  • 支持全局默認設置是否隱藏返回按鈕,同時支持視圖控制器自己默認設置和動態(tài)設置
  • 支持全局默認設置是否隱藏導航欄,同時支持視圖控制器自己默認設置和動態(tài)設置
  • 支持全局默認設置是否隱藏標簽欄,同時支持視圖控制器自己默認設置和動態(tài)設置
  • 支持設置狀態(tài)欄樣式和顯示隱藏狀態(tài)
  • 支持定制返回按鈕樣式
  • 支持自定義返回按鈕
  • 支持自定義返回按鈕點擊事件
  • 支持Interface Builder

安裝

YDRootNavigationController 可通過 CocoaPods 獲得。安裝
只需將以下行添加到您的 Podfile 中:

pod 'YDRootNavigationController'

用法

一、全局默認樣式配置

1.創(chuàng)建一個類用來實現(xiàn)YDAppAppearanceProtocol協(xié)議
class MyAppAppearance: YDAppAppearanceProtocol {
    var navigationBarBackgroundColor: UIColor? { .white }
    var navigationBarBackgroundImage: UIImage? { UIImage.gradient(colors: [UIColor.red, UIColor.blue], type: .leftToRight, size: CGSize(width: Screen.width, height: Screen.navigationBarHeight))?.addCorner(YDRectCorner(bottomRight: 20))}
    var navigationBarShadowColor: UIColor? { .red }
    var titleTextAttributes: [NSAttributedString.Key : Any]? { [NSAttributedString.Key.foregroundColor: UIColor.blue] }
    var backItemImage: UIImage? { UIImage(named: "nav_back_black_button") }
    var backItemImageInsets: UIEdgeInsets? { UIEdgeInsets(top: 0, left: -6, bottom: 0, r[圖片上傳中...(導航欄背景顏色.gif-384156-1711033391835-0)]
ight: 0) }
}

這里用到的導航欄背景圖片是用代碼生成的,項目開發(fā)還是用UI切的圖片比較節(jié)約系統(tǒng)資源,需要注意的是,如果同時設置導航欄背景顏色和背景圖片,背景顏色將會被背景圖片覆蓋而失效

2.在AppDelegate中調用
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // 全局默認樣式配置
        MyAppAppearance().configure()
        return true
    }
}

二、視圖控制器自定義樣式配置

  1. 導航欄控制器設置為YDRootNavigationController或繼承YDRootNavigationController的類
  • 代碼
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window?.rootViewController = YDRootNavigationController()
    return true
}
  • Interface Builder設置
IB設置YDRootNavigationController.gif

導航欄樣式配置

導航欄標題文字屬性
class ViewController: UIViewController {
    override var navigationBarAppearence: YDNavigationBarAppearence {
        YDNavigationBarAppearence(titleTextAttributes: [NSAttributedString.Key.foregroundColor: UIColor.randomColor, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 20)])
    }
}
標題文字屬性.gif
導航欄背景顏色
class ViewController: UIViewController {
    override var navigationBarAppearence: YDNavigationBarAppearence {
        YDNavigationBarAppearence(backgroundColor: .randomColor)
    }
}
導航欄背景顏色.gif
導航欄背景圖片
class ViewController: UIViewController {
    override var navigationBarAppearence: YDNavigationBarAppearence { YDNavigationBarAppearence(backgroundImage: UIImage.gradient(colors: [UIColor.systemPink, UIColor.purple], type: .leftToRight, size: CGSize(width: Screen.width, height: Screen.navigationBarHeight))?.addCorner(YDRectCorner(bottomLeft: 20, bottomRight: 20))) }
}

這里用到的導航欄背景圖片是用代碼生成的,項目開發(fā)還是用UI切的圖片比較節(jié)約系統(tǒng)資源,需要注意的是,如果同時設置導航欄背景顏色和背景圖片,背景顏色將會被背景圖片覆蓋而失效。

導航欄背景圖片.gif

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容