介紹
越來(lái)越多的應(yīng)用程序在擁有全局導(dǎo)航欄樣式的同時(shí)常挚,也要求每個(gè)視圖控制器自定義導(dǎo)航欄樣式幅垮。
YDRootNavigationController 這個(gè)項(xiàng)目就是幫助開(kāi)發(fā)者以高效的方式解決這個(gè)問(wèn)題蚁署,開(kāi)發(fā)者以簡(jiǎn)單的方式使用這個(gè)導(dǎo)航控制器踊赠,就像視圖控制器獨(dú)立設(shè)置狀態(tài)欄風(fēng)格一樣产场,并且您可以為每個(gè)視圖控制器提供單獨(dú)的導(dǎo)航欄樣式狡门,包括原生返回手勢(shì)、返回按鈕搀捷、狀態(tài)欄樣式星掰、標(biāo)簽欄顯示和隱藏狀態(tài)等等∧壑郏可以查看這篇 Swift YDRootNavigationController的實(shí)現(xiàn)原理 文章進(jìn)行深入了解氢烘。
概覽
- 支持設(shè)置全局統(tǒng)一默認(rèn)的導(dǎo)航欄樣式(例如:導(dǎo)航欄背景顏色、底部分割線顏色家厌、標(biāo)題文字屬性)播玖,同時(shí)支持每個(gè)視圖控制器可以自定義導(dǎo)航欄樣式
- 支持全局默認(rèn)設(shè)置是否開(kāi)啟原生的返回手勢(shì),同時(shí)支持視圖控制器自己默認(rèn)設(shè)置和動(dòng)態(tài)設(shè)置
- 支持全局默認(rèn)設(shè)置是否開(kāi)啟全屏返回手勢(shì)饭于,同時(shí)支持視圖控制器自己默認(rèn)設(shè)置和動(dòng)態(tài)設(shè)置
- 支持全局默認(rèn)設(shè)置是否隱藏返回按鈕蜀踏,同時(shí)支持視圖控制器自己默認(rèn)設(shè)置和動(dòng)態(tài)設(shè)置
- 支持全局默認(rèn)設(shè)置是否隱藏導(dǎo)航欄,同時(shí)支持視圖控制器自己默認(rèn)設(shè)置和動(dòng)態(tài)設(shè)置
- 支持全局默認(rèn)設(shè)置是否隱藏標(biāo)簽欄掰吕,同時(shí)支持視圖控制器自己默認(rèn)設(shè)置和動(dòng)態(tài)設(shè)置
- 支持設(shè)置狀態(tài)欄樣式和顯示隱藏狀態(tài)
- 支持定制返回按鈕樣式
- 支持自定義返回按鈕
- 支持自定義返回按鈕點(diǎn)擊事件
- 支持
Interface Builder
安裝
YDRootNavigationController 可通過(guò) CocoaPods 獲得果覆。安裝
只需將以下行添加到您的 Podfile 中:
pod 'YDRootNavigationController'
用法
一、全局默認(rèn)樣式配置
1.創(chuàng)建一個(gè)類(lèi)用來(lái)實(shí)現(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[圖片上傳中...(導(dǎo)航欄背景顏色.gif-384156-1711033391835-0)]
ight: 0) }
}
這里用到的導(dǎo)航欄背景圖片是用代碼生成的殖熟,項(xiàng)目開(kāi)發(fā)還是用UI切的圖片比較節(jié)約系統(tǒng)資源局待,需要注意的是,如果同時(shí)設(shè)置導(dǎo)航欄背景顏色和背景圖片,背景顏色將會(huì)被背景圖片覆蓋而失效
钳榨。
2.在AppDelegate中調(diào)用
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// 全局默認(rèn)樣式配置
MyAppAppearance().configure()
return true
}
}
二舰罚、視圖控制器自定義樣式配置
- 導(dǎo)航欄控制器設(shè)置為YDRootNavigationController或繼承YDRootNavigationController的類(lèi)
- 代碼
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
self.window?.rootViewController = YDRootNavigationController()
return true
}
-
Interface Builder
設(shè)置
導(dǎo)航欄樣式配置
導(dǎo)航欄標(biāo)題文字屬性
class ViewController: UIViewController {
override var navigationBarAppearence: YDNavigationBarAppearence {
YDNavigationBarAppearence(titleTextAttributes: [NSAttributedString.Key.foregroundColor: UIColor.randomColor, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 20)])
}
}
導(dǎo)航欄背景顏色
class ViewController: UIViewController {
override var navigationBarAppearence: YDNavigationBarAppearence {
YDNavigationBarAppearence(backgroundColor: .randomColor)
}
}
導(dǎo)航欄背景圖片
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))) }
}
這里用到的導(dǎo)航欄背景圖片是用代碼生成的,項(xiàng)目開(kāi)發(fā)還是用UI切的圖片比較節(jié)約系統(tǒng)資源重绷,需要注意的是沸停,如果同時(shí)設(shè)置導(dǎo)航欄背景顏色和背景圖片膜毁,背景顏色將會(huì)被背景圖片覆蓋而失效
昭卓。
導(dǎo)航欄陰影顏色
class ViewController: UIViewController {
override var navigationBarAppearence: YDNavigationBarAppearence {
YDNavigationBarAppearence(shadowColor: .randomColor)
}
}