iOS开发知识小集iOS

iOS 自定义导航栏组件

2018-10-31  本文已影响177人  Pircate

EachNavigationBar

示例

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

版本要求

安装

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

Podfile

pod 'EachNavigationBar'

Cartfile

github "Pircate/EachNavigationBar"

预览

demo_new.gif demo_push.gif

用法

导入

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.global_configuration.isEnabled = YES;

设置

导航栈全局配置

更多配置请看这里

Swift

nav.navigation.configuration.titleTextAttributes = [.foregroundColor: UIColor.blue]
nav.navigation.configuration.barTintColor = UIColor.red
nav.navigation.configuration.shadowImage = UIImage(named: "shadow")
nav.navigation.configuration.backImage = UIImage(named: "back")
nav.navigation.configuration.setBackgroundImage(UIImage(named: "nav"), for: .any, barMetrics: .default)

Objective-C

nav.global_configuration.titleTextAttributes = @{NSForegroundColorAttributeName: UIColor.blueColor};
nav.global_configuration.barTintColor = UIColor.redColor;
nav.global_configuration.shadowImage = [UIImage imageNamed:@"shadow"];
nav.global_configuration.backImage = [UIImage imageNamed:@"back"];
[nav.global_configuration setBackgroundImage:[UIImage imageNamed:@"nav"] for:UIBarPositionAny barMetrics:UIBarMetricsDefault];

每个控制器设置

普通设置

Swift

// 一般用法同系统组件
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.setShadowHidden(true)

// 设置状态栏文字颜色
navigation.bar.statusBarStyle = .lightContent

// 如果想自定义导航栏位置,请将下面属性设为 true
navinavigation.bar.isUnrestoredWhenViewWillLayoutSubviews = true

// 导航栏额外高度
navigation.bar.extraHeight = 14

// 自定义返回按钮事件
navigation.item.leftBarButtonItem?.action = #selector(backBarButtonAction)

Objective-C

self.each_navigationBar.xxx
self.each_navigationItem.xxx
大标题设置(iOS 11.0+)
// 显示大标题
if #available(iOS 11.0, *) {
    navigation.bar.prefersLargeTitles = true
}
// 隐藏大标题
if #available(iOS 11.0, *) {
    navigation.bar.prefersLargeTitles = false
}
// 设置大标题透明度
if #available(iOS 11.0, *) {
    navigation.bar.setLargeTitleAlpha(0.5)
}

对于 UITableViewController

请在控制器释放的时候移除观察者

deinit {
    removeObserverForContentOffset()
}

作者

Pircate, gao497868860@163.com

许可证

EachNavigationBar 可在 MIT 许可证下使用。有关更多信息,请参阅许可证文件。

上一篇 下一篇

猜你喜欢

热点阅读