QDNavigationBar
QDNavigationBar 是一个轻量、易用的导航栏样式管理库,它可以帮助您为每个控制器定义自己的导航栏样式,这一切只需几行代码即可实现!
🌟
特性- 让每个控制器都能定制自己想要的导航栏样式
- 轻量、低耦合,只需数行代码即可集成
- 支持设置多种自定义样式,如:背景颜色、背景图片、底部线条颜色、是否具有半透明效果、透明度等
- 支持选择导航栏切换时的过渡效果
- 支持 Large Title 模式
- 支持深色模式
- 支持横竖屏切换
💡
要求- iOS 9.0+
- Xcode 11.0+
- Swift 4.0+
👷♂️
安装QDNavigationBar 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'QDNavigationBar'
🧭
使用1. 导入QDNavigationBar
/// Swift:
import QDNavigationBar
/// Objective-C
@import QDNavigationBar;
2. 为UINavigationController开启QDNavigationBar支持
QDNavigationBar通过Runtime为UINavigationController添加了一个实例属性navBarConfig,只需给该属性赋值即可启用QDNavigationBar功能。
/// Swift
let config = QDNavigationBarConfig()
config.backgroundColor = UIColor.green
navigationController.navBarConfig = config
/// Objective-C
UINavigationController实例级别的控制可以灵活地确定QDNavigationBar的影响范围:您可以自由控制哪些导航控制器需要使用QDNavigationBar来管理导航栏样式,哪些不需要;
通常,项目中都会有一个自定义的导航控制器,您可以在该类中进行相关设置,这样您不需要为每个实例都进行设置。
UINavigationController的navBarConfig作为导航栏默认样式配置,如果顶层视图控制器没有自己的配置,则默认配置将生效。
3. 为某些UIViewController设置独立的导航栏样式配置
同样地,QDNavigationBar也为UIViewController添加了一个实例属性navBarConfig。
默认情况下,UIViewController的navBarConfig为nil,此时该控制器的导航栏样式将由其导航栏的navBarConfig决定;
在实际项目中,通常只有少数页面需要设置特殊的样式,可以为其单独设置navBarConfig来实现。
override func viewDidLoad() {
super.viewDidLoad()
// 配置导航栏样式,仅针对当前控制器有效
let config = QDNavigationBarConfig()
config.backgroundColor = UIColor.blue
self.navBarConfig = config
}
总结一下
1. 如果当前显示的控制器navBarConfig为nil,则导航栏样式由导航控制器的navBarConfig决定;
2. 如果当前显示的控制器的navBarConfig不为nil,则导航栏样式由该配置决定。
修改控制器或导航控制器的navBarConfig的任何属性都将实时生效。
4. QDNavigationBarConfig支持的配置
/// 导航栏背景颜色
/// 默认白色(UIColor.white)
@objc public var backgroundColor: UIColor
/// 导航栏背景图片
/// 默认nil
@objc public var backgroundImage: UIImage?
/// 导航栏背景透明度
/// 默认1.0
/// 注意此属性仅影响导航栏背景的透明度,不会影响导航栏上的控件(比如标题、返回键...)
@objc public var alpha: CGFloat
/// 是否需要模糊效果
/// 默认false,即不需要
/// 设置为true后,可通过blurStyle控制模糊效果样式
@objc public var needBlurEffect: Bool
/// 模糊效果样式
/// 默认.light
/// 在needBlurEffect为true时,此属性有效
@objc public var blurStyle: UIBlurEffect.Style
/// 导航栏底部线条颜色
/// 默认透明(UIColor.clear)
@objc public var bottomLineColor: UIColor
/// 导航栏是否隐藏
/// 默认false,即不隐藏
@objc public var barHidden: Bool
/// 否开启导航栏事件穿透,
/// 默认为false,即不会穿透; 当设置为为true时,点击导航栏背景的事件会透到下层视图
/// 注意,如果导航栏上有标题、返回按钮等时,点击这些控件的事件不会被穿透
@objc public var eventThrough: Bool
/// 两个视图控制器切换(push/pop)时导航栏样式切换动画
/// 默认.automatic
@objc public var transitionStyle: TransitionStyle
QDNavigationBar不会为您管理诸如返回按钮、标题颜色、顶部菜单等,主要有两个原因:
1. 这些都可以通过UIViewController的navigationItem进行设置
2. 作者希望QDNavigationBar能够专注于解决导航栏"公地悲剧"问题,尽量不添加非必要功能
🧐
⚠️
备注注意事项:
当为一个UINavigationController启用QDNavigationBar管理后:
1. 不要调用navigationBar的setBackgroundColor、shadowImage方法
2. 不要调用UINavigationController的setNavigationBarHidden方法
3. 注意navigationBar的translucent属性将为true,并且您不应该修改它
作者👨💻
联系方式
如果QDNavigationBar对您有帮助,请点Star,非常感谢
✨
授权协议QDNavigationBar遵循MIT授权协议。更多信息请参阅LICENSE文件。