本文提供导航栏组件的预览效果及其代码示例。

AUNavigationBar 为 mPaaS 导航栏控件,并提供了 mPaaS 导航栏的默认样式等。

为方便后续扩展,所有 mPaaS 应用都必须使用 AUNavigationBar,而不是系统的 UINavigationBar。

效果图

接口说明

/**
 mPaaS 导航栏控件(包括 mPaaS 样式等)
 初始化:
 UINavigationController *navBar = [[UINavigationController alloc] initWithNavigationBarClass:NSClassFromString(@"AUNavigationBar")  toolbarClass:nil];
 */
@interface AUNavigationBar : UINavigationBar

@end


/**
 UINavigationBar 扩展,定义了 UINavigationBar 的默认样式
 */
@interface UINavigationBar (AUNavigationBarExtensions)

/**
 *  返回框架导航栏默认 title 颜色,默认为 #000000
 *
 *  @return
 */
+ (UIColor*)getNavigationBarTitleDefaultColor;

/**
 *  返回框架导航栏上 item 颜色,默认为 #108EE9
 *
 *  @return
 */
+ (UIColor*)getNavigationBarButtonItemDefaultColor;

/**
 *  返回框架导航栏颜色,默认为 #fffff
 *
 *  @return
 */
+ (UIColor*)getNavigationBarDefaultColor;

/**
 *  获取导航栏底部横线的颜色,默认为 #e1e1e1
 *
 *  @return
 */
+ (UIColor*)getNavigationBarBotLineColor;

/**
 * 注意:
 * 1、基类 DTViewController 在 ViewWillAppear 里设置了导航栏的默认样式;
 * 2、业务可以通过系统接口或者下面提供的接口来修改导航栏的样式,一般在 ViewWillAppear 设置;
 * 3、如果 VC 是 DTViewController 的子类必须在 ViewWillAppear 里设置,否则会被覆盖;
 * 4、保证修改后在 ViewWillDisappear 时通过 setNavigationBarDefaultStyle 恢复默认样式;
 * 5、如果 VC 是在 UITabBarController 容器的首页,不要做上面第 4 步的处理,否则切换 tab 时有覆盖问题。
 */

/**
 *
 * 设置默认的导航栏背景,默认设置背景色 #ffffff,底部横线 #e1e1e1
 *
 */
- (void)setNavigationBarDefaultStyle;

/**
 *
 * 设置默认的导航栏标题样式
 *
 */
- (void)setNavigationBarDefaultTitleTextAttributes;

/**
 *
 * 设置导航栏标题颜色,请在 ViewWillAppear 里设置,否则会被框架默认颜色覆盖
 *
 */
- (void)setNavigationBarTitleTextAttributesWithTextColor:(UIColor *)textColor;

/**
 *
 * 设置导航栏透明样式
 * 注意:此方法设置导航栏全透明后,返回的动画过程中会产生闪白问题,目前无解,业务请勿使用。如需使用,请评估影响是否可接受
 */
- (void)setNavigationBarTranslucentStyle;

/**
 * 指定导航栏颜色,当 translucent 为 Yes 时,有毛玻璃效果
 * 注意:调用此接口后,如有需要,请在此方法之后调用设置底部横线的接口,否则底部横线颜色会被默认颜色 #e1e1e1 覆盖
 *
 * @param color          显示颜色
 * @param translucent    是否透明
 *
 */
- (void)setNavigationBarStyleWithColor:(UIColor *)color translucent:(BOOL)translucent;

/**
 *  导航栏下面可能有分割线,导致界面不符合一些UI的要求,使用这个方法设置
 *  注意:若自定义了导航栏背景,(包括调用 setNavigationBarStyleWithColor:或重写 opaqueNavigationBarColor)
 *  请在修改背景色方法之后调用此接口,否则底部横线颜色会被默认颜色 #e1e1e1 覆盖
 */
- (void)setNavigationBarBottomLineColor:(UIColor*)color;

/**
 *  业务使用系统方法 setBarTintColor,setBackGroundImage,setBackgroundColor 设置导航栏颜色时,先调用此方法消除默认效果
 *  否则默认颜色会与系统设置色叠加产生色差
 */
- (void)resetNavigationBarColor;

/**
 *
 *  屏蔽右滑返回取消时,导航栏闪烁的问题,业务方请勿调用
 */
- (void)setNavigationBarMaskLayerWithtColor:(UIColor *)color;

/**
 *  返回导航栏当前的背景色
 *
 *  @return 导航栏当前的背景色
 */
- (UIColor*)getNavigationBarCurrentColor;

@end

代码示例

// 初始化 UINavigationController
UINavigationController *navBar = [[UINavigationController alloc] initWithNavigationBarClass:NSClassFromString(@"AUNavigationBar")  toolbarClass:nil];

// 然后再 VC 中配置导航栏
AUBarButtonItem *cancelItem = [AUBarButtonItem backBarButtonItemWithTitle:@"返回" target:self action:@selector(cancel)];
cancelItem.backButtonTitle = @"取消";
self.navigationItem.leftBarButtonItem = cancelItem;

UIImage *image1 = [AUIconView iconWithName:kICONFONT_MAP width:22 color:AU_COLOR_LINK];
UIImage *image2 = [AUIconView iconWithName:kICONFONT_HELP width:22 color:AU_COLOR_LINK];
AUBarButtonItem *rightItem1 = [[AUBarButtonItem alloc] initWithImage:image1 style:UIBarButtonItemStylePlain target:self action:@selector(rightBarItemPressed)];
AUBarButtonItem *rightItem2 = [[AUBarButtonItem alloc] initWithImage:image2 style:UIBarButtonItemStylePlain target:self action:@selector(rightBarItemPressed)];
self.navigationItem.rightBarButtonItems = @[rightItem1, rightItem2];