通过 runtime
给每个控制器添加一个导航栏。支持 Objective-C
和 Swift
。
自动导入 Storyboard
设置。
预览
用法
导入
Swift
import EachNavigationBar复制代码
Objective-C
@import EachNavigationBar;复制代码
开启
给当前导航栈的 viewControllers 添加一个独立的导航栏。
只对当前导航栈有效,不影响其他导航栈。
Swift
let nav = UINavigationController(rootViewController: vc)nav.navigation.configuration.isEnabled = true复制代码
Objective-C
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];nav.navigation_configuration.isEnabled = YES;复制代码
设置
导航栈全局配置
更多配置请看
Swift
nav.navigation.configuration.titleTextAttributes = [.foregroundColor: UIColor.blue]nav.navigation.configuration.barTintColor = UIColor.rednav.navigation.configuration.shadowImage = UIImage(named: "shadow")nav.navigation.configuration.backBarButtonItem = .init(style: .image(UIImage(named: "back")), tintColor: UIColor.red)nav.navigation.configuration.setBackgroundImage(UIImage(named: "nav"), for: .any, barMetrics: .default)复制代码
Objective-C
nav.navigation_configuration.titleTextAttributes = @{ NSForegroundColorAttributeName: UIColor.blueColor};nav.navigation_configuration.barTintColor = UIColor.redColor;nav.navigation_configuration.shadowImage = [UIImage imageNamed:@"shadow"];nav.navigation_configuration.backBarButtonItem = [[BackBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back"]];[nav.navigation_configuration setBackgroundImage:[UIImage imageNamed:@"nav"] for:UIBarPositionAny barMetrics:UIBarMetricsDefault];复制代码
每个控制器设置
普通设置
Swift
// 一般用法同系统组件navigation.bar -> EachNavigationBar -> UINavigationBarnavigation.item -> UINavigationItem// 隐藏导航栏navigation.bar.isHidden = true// 设置导航栏透明度navigation.bar.alpha = 0.5// 设置标题透明度navigation.bar.setTitleAlpha(0.5)// 设置 barButtonItem 透明度navigation.bar.setTintAlpha(0.5)// 如果 barButtonItem 是自定义视图navigation.item.leftBarButtonItem?.customView?.alpha = 0.5// 如果 barButtonItem 自定义了 tintColornavigation.item.leftBarButtonItem?.tintColor = navigation.item.leftBarButtonItem?.tintColor?.withAlphaComponent(0.5)// 移除毛玻璃效果navigation.bar.isTranslucent = false// 隐藏底部阴影navigation.bar.isShadowHidden = true// 设置状态栏样式navigation.bar.statusBarStyle = .lightContent// 设置返回按钮navigation.bar.backBarButtonItem = .init(style: .title("Back"), tintColor: .red)// 允许返回事件navigation.bar.backBarButtonItem.shouldBack = { item in // do something return false}// 返回事件之前回调navigation.bar.backBarButtonItem.willBack = { // do something}// 返回事件之后回调navigation.bar.backBarButtonItem.didBack = { // do something}// 如果想自定义导航栏位置,请将下面属性设为 falsenavigation.bar.automaticallyAdjustsPosition = false// 导航栏附加高度navigation.bar.additionalHeight = 14// 导航栏附加视图navigation.bar.additionalView = UIView()// 导航栏阴影navigation.bar.shadow = Shadow( color: UIColor.black.cgColor, opacity: 0.5, offset: CGSize(width: 0, height: 3))复制代码
Objective-C
self.navigation_bar.xxxself.navigation_item.xxx复制代码
大标题设置(iOS 11.0+)
UINavigationController
// 开启大标题nav.navigation.prefersLargeTitles()复制代码
UIViewController
// 显示或隐藏大标题navigation.bar.prefersLargeTitles = true// 设置大标题透明度navigation.bar.setLargeTitleAlpha(0.5)复制代码
关于约束
和使用系统导航栏完全一致。复制代码
- 请注意 iOS 11 以上和以下的区别。
- 如果使用 XIB 请参看,应该会有帮助。
- 用户可以试试这个 。