RainbowNavigation
是由Swfit2.0 编写的一个能够动态改变UINavigationBar
背景色的组件。
- 将
UINavigationBar
背景色改为透明 UINavigationBar
增加类似MaterialDesign的深色StatusBar
UINavigationController
在Push/Pop 时,背景色随动画过程进行改变- 手势拖拽进行
UINavigationController
的Pop行为
- iOS 8.0+
- Swift 2.0 +
在Podfile添加以下代码快速集成
pod 'RainbowNavigation
如下代码能够直接设置UINavigationBar的背景色,并不会有iOS7之后UINavigationBar
的色差问题。当把颜色设置为clearColor
时,UINavigationBar
的背景会透明。
navigationBar.ll_setBackgroundColor(UIColor.clearColor())
将ll_setBackgroundColor
带来的影响去掉
navigationBar.ll_reset() // 恢复默认,取消之前的颜色设置的影响
navigationBar.ll_setStatusBarMaskColor(UIColor.blackColor().colorWithAlphaComponent(0.1))
最好统一使用ll_setBackgroundColor(color)
这个方法,因为RainbowNavigation
也是通过此方法对UINavigationBar的颜色进行设置的。
首先声明LLRainbowNavigation
属性,然后通过wireTo
方法将为其绑定对应的UINavigationController
。
lazy var rainbowNavigation = LLRainbowNavigation()
override func viewDidLoad() {
super.viewDidLoad()
if let navController = self.navigationController {
rainbowNavigation.wireTo(navigationController: navController)
}
}
LLRainbowColorSource
是一个protocol
,所有的UIViewController都可以实现此协议。在RainbowNavigation
绑定了一个UINavigationController
之后,每次UINavigationController
在进行Push
或Pop
操作时,都会检查栈顶的UIViewController
是否实现了ColorSource协议,并且显示Protocol两个方法返回的对应的颜色。
@objc public protocol LLRainbowColorSource {
optional func ll_navigationBarInColor() -> UIColor // ViewController被Push进去的时候,UINavigationBar将转变的背景色
optional func ll_navigationBarOutColor() -> UIColor // ViewController被Pop出去的时候,UINavigationBar将转变的颜色
}
LLRainbowColorSource
是可选的,可以不实现,此时UINavigationBar
将保持原本的颜色。
RainbowNavigation
的使用十分简单,可以通过下载demo项目来查看Gif图片显示的功能的实现方式。
DanisFabric, [email protected]
RainbowNavigation is available under the MIT license. See the LICENSE file for more info.