EachNavigationBar

为每个视图控制器自定义导航条
授权协议 MIT
开发语言 Swift
所属分类 iOS代码库、 导航条(Navigation Bar)
软件类型 开源软件
地区 不详
投 递 者 程胡非
操作系统 iOS
开源组织
适用人群 未知
 软件概览

EachNavigationBar:每个视图控制器的自定义导航条。

 

示例

要运行示例项目,首先克隆 repo 并在 Example 目录运行 pod install

版本要求

  • iOS 9.0
  • Swift 4.2

安装

EachNavigationBar 可通过 CocoaPods 或者 Carthage 安装, 简单的添加下面一行到你的 Podfile 或者 Cartfile:

Podfile

pod 'EachNavigationBar'

Cartfile

github "Pircate/EachNavigationBar"

用法

导入

Swift

import EachNavigationBar

开启

给当前导航栈的 viewControllers 添加一个独立的导航栏。

只对当前导航栈有效,不影响其他导航栈。

let nav = UINavigationController(rootViewController: vc)
nav.navigation.configuration.isEnabled = true

设置

导航栈全局配置

不要通过 navigationController.navigationBar 去设置全局属性!!!

更多配置请看这里

nav.navigation.configuration.titleTextAttributes = [.foregroundColor: UIColor.blue]

nav.navigation.configuration.barTintColor = UIColor.red

nav.navigation.configuration.shadowImage = UIImage(named: "shadow")

nav.navigation.configuration.setBackgroundImage(UIImage(named: "nav"), for: .any, barMetrics: .default)

nav.navigation.configuration.backItem = UINavigationController.Configuration.BackItem(style: .title("返回"))

nav.navigation.configuration.prefersLargeTitles = true

nav.navigation.configuration.largeTitle.displayMode = .always

每个控制器设置

普通设置

// 一般用法同系统组件
navigation.bar  -> EachNavigationBar -> UINavigationBar
navigation.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 自定义了 tintColor
navigation.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
}

// 如果想自定义导航栏位置,请将下面属性设为 false
navigation.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))

大标题设置(iOS 11.0+)

// 开启大标题
navigation.bar.prefersLargeTitles = true

// 显示模式
navigation.item.largeTitleDisplayMode = .always

// 设置大标题透明度
navigation.bar.setLargeTitleAlpha(0.5)

关于约束

和使用系统导航栏完全一致。
  • 请注意 iOS 11 以上和以下的区别。
  • 如果使用 XIB 请参看这篇文章,应该会有帮助。
  • SnapKit 用户可以试试这个 extension

 

  • EachNavigationBar 是一个能够自定义iOS导航栏的开源插件。 源码托管在github上,大家可自行搜索查看。本文就不贴链接了。 EachNavigationBar 功能能够支撑日常使用,支持大标题等功能。   在使用EachNavigationBar中 ,大家可能会遇到一个问题,就是,手动给NavBar设置自定义颜色,取出导航栏底部阴影线,在view上同时设置对应颜色,会出现导航栏

 相关资料
  • 问题内容: 题 如何仅使用按钮的touch up内部事件从一个视图控制器导航到另一个视图控制器? 更多信息 我在一个示例项目中尝试执行的步骤是: 创建示例单视图应用程序。 为用户界面(ViewController2)添加一个新文件->具有XIB的Objective-C类。 在ViewController.xib中添加一个按钮,并控制单击ViewController.h的按钮以创建内部补全事件。 转

  • 我在TableView中有CollectionView。一切都好,但是。当我想将我的单元格导航到另一个viewController时,我遇到了错误 Xcode show me self.NavigationController?.PushViewController(bookView,Animated:true)行出现错误。这是错误说明: RelatedBookTableViewCell是我的自定

  • 问题内容: 我正在尝试在导航栏的中心添加自定义视图,并且正在使用以下代码对其进行测试: 我在视图控制器的viewDidLoad方法中进行设置,但是当我运行程序时,导航栏中似乎没有任何变化。 你能帮我吗? 问题答案: 这可行。初始化时给框架

  • 我有一个导航视图控制器,它会在操作时向选项卡栏视图控制器发送一个序列。因此,选项卡式视图控制器继承了导航栏。我正在尝试将标题应用于连接到选项卡栏视图控制器的其中一个视图控制器,但通过代码设置标题对我不起作用。有人知道为什么会这样吗? 这是我的故事板的图片: 带有注销按钮的视图控制器是我试图在导航条(代码)中设置标题的地方: 导航控制器中嵌入的视图控制器触发到选项卡栏控制器的顺序:

  • 问题内容: 我没有找到有关此问题的文章,但没有一个解决我的问题。 就像我说的那样。 ViewControllerA ViewControllerB 我试图将添加为的子视图,但是它 抛出类似“ ” 的错误。 下面是代码… ViewControllerA ViewControllerB只是一个带有标签的简单屏幕。 ViewControllerB EDIT 根据用户答案的​​建议解决方案,ViewCon

  • 我找到了一些关于这个问题的帖子,但是没有一个能解决我的问题。 说像我已经... ViewControlllerA ViewControlllerB 我试图将ViewControlllerB添加为ViewControlllerA中的子视图,但是,它抛出了一个错误,如""。 下面是代码。。。 视图控制器 ViewControllerB只是一个带有标签的简单屏幕。 视图控制器B 编辑

  • 我正在尝试用PageView在Flutter中实现一个自定义的BottomNavigationBar,用于在同一支架中包含有状态小部件的不同页面之间滑动。 虽然我可以点击navbar并更改页面,但我无法在更改指示所选页面的icon_button的颜色的同时实现pageview滑动手势。我能够完美地使用BottomNavigationBarItem来完成此操作,但我想使用自定义设计。 包含不同Ico