博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 自定义导航栏组件
阅读量:6160 次
发布时间:2019-06-21

本文共 3171 字,大约阅读时间需要 10 分钟。

通过 runtime 给每个控制器添加一个导航栏。支持 Objective-CSwift

自动导入 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 请参看,应该会有帮助。
  • 用户可以试试这个 。

转载于:https://juejin.im/post/5bd7b99bf265da0a8d36dd0d

你可能感兴趣的文章
关于静态属性和静态函数
查看>>
进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
查看>>
spring+jotm+ibatis+mysql实现JTA分布式事务
查看>>
MyBatis启动:MapperStatement创建
查看>>
调查问卷相关
查看>>
eclipse启动无响应,老是加载不了revert resources,或停留在Loading workbench状态
查看>>
1. Git-2.12.0-64-bit .exe下载
查看>>
怎样关闭“粘滞键”?
查看>>
[转]React 教程
查看>>
拓扑排序介绍
查看>>
eclipse打开工作空间(workspace)没有任务反应
查看>>
使用Sybmol模块来构建神经网络
查看>>
字符串去分割符号
查看>>
WPF中,多key值绑定问题,一个key绑定一个界面上的对象
查看>>
UML类图简明教程
查看>>
java反编译工具(Java Decompiler)
查看>>
Android开发之自定义对话框
查看>>
微信Access Token 缓存方法
查看>>
Eclipsed的SVN插件不能识别之前工作空间的项目
查看>>
Linux 查看iptables状态-重启
查看>>