QDNavigationBar 0.4.0

QDNavigationBar 0.4.0

Sinno 维护。



  • 作者:
  • sinno93

QDNavigationBar

CI Status Version License Platform

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,并且您不应该修改它

作者👨‍💻

联系方式📜[邮件地址保护,请删除保护码]@example.com

🎉有任何问题和建议,欢迎提交issue或pull request!🎉

如果QDNavigationBar对您有帮助,请点Star,非常感谢🤩

授权协议

QDNavigationBar遵循MIT授权协议。更多信息请参阅LICENSE文件。