mPaaS-H5导航栏定制化

本文涉及的产品
mPaaS订阅基础套餐,标准版 3个月
简介: 金融级移动开发平台 mPaaS(Mobile PaaS)为 App 开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。其中很多业务在接入H5容器后都会对容器的导航栏进行深度定制,本文旨在通过不同实际场景的描述,供业务参考使用。


一.背景

 金融级移动开发平台 mPaaS(Mobile PaaS)为 App 开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。其中很多业务在接入H5容器后都会对容器的导航栏进行深度定制,本文旨在通过不同实际场景的描述,供业务参考使用。

二.Native修改导航栏左侧返回按钮

1.自定义NBPluginBase 插件中修改

1.自定义原生BarButtonItem

监听kNBEvent_Scene_NavigationItem_Left_Back_Create_Before,在此监听事件中设置自定义BarButtonItem

//监听kNBEvent_Scene_NavigationItem_Left_Back_Create_Before,在此监听事件中:


UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.frame = CGRectMake(0, 0, 44, 44);

button.backgroundColor = [UIColor whiteColor];

[button setTitle:@"取消" forState:UIControlStateNormal];

button.titleLabel.font = [UIFont systemFontOfSize:14.0];

[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];       event.context.currentViewController.navigationItem.leftBarButtonItem.customView = button;

注:此方案自定义button,需要自行实现关闭页面逻辑。

2.修改返回按钮

监听kNBEvent_Scene_NavigationItem_Left_Back_Create_After,在此监听事件中修改默认返回按钮样式,包括文案颜色、返回箭头等,文案内容默认不可修改。

//监听kNBEvent_Scene_NavigationItem_Left_Back_Create_After,在此监听事件中:

// 修改返回按钮样式

NSArray *leftBarButtonItems = event.context.currentViewController.navigationItem.leftBarButtonItems;

if ([leftBarButtonItems count] == 1) {

   if (leftBarButtonItems[0] && [leftBarButtonItems[0] isKindOfClass:[AUBarButtonItem class]]) {

       //在默认返回按钮基础上,修改返回箭头和文案颜色

       AUBarButtonItem *backItem = leftBarButtonItems[0];

       backItem.backButtonColor = [UIColor greenColor];

       backItem.titleColor = [UIColor orangeColor];// [UIColor colorFromHexString:@"#00ff00"];

       //隐藏、显示返回箭头

       backItem.hideBackButtonImage = NO;

       //backItem.backButtonTitle; 标题内容更改无效。

                     

       // 隐藏返回文案:文案设置为透明,保留返回按钮 s 点击区域

       //backItem.titleColor = [UIColor clearColor];

   }

}

2.H5容器中自定义修改

1.方式一,在viewWillAppear 获取自定义启动参数,根据参数自定义返回按钮。

- (void)viewWillAppear:(BOOL)animated {

   [super viewWillAppear:animated];

   // 当前页面的启动参数

   NSDictionary *expandParams = self.psdScene.createParam.expandParams;

   NSLog(@"[mpaas] expandParams: %@", expandParams);

}

获取启动参数后,依据自定义参数实现自定义按钮。

// 修改默认返回按钮文案颜色

   NSString *backButtonColorString = expandParams[@"backButtonColor"];

   if ([backButtonColorString isKindOfClass:[NSString class]] && [backButtonColorString length] > 0) {

       UIColor *backButtonColor = [UIColor colorFromHexString:backButtonColorString];

       NSArray *leftBarButtonItems = self.navigationItem.leftBarButtonItems;

       if ([leftBarButtonItems count] == 1) {

           if (leftBarButtonItems[0] && [leftBarButtonItems[0] isKindOfClass:[AUBarButtonItem class]]) {

               backItem.backButtonTitle = @"测试";// 返回按钮title

               backItem.titleColor = backButtonColor;// 返回按钮文本颜色

               backItem.backButtonColor = [UIColor blueColor];// 设置箭头颜色

               backItem.hideBackButtonImage = NO;//隐藏返回按钮图片,提供给框架使用

               // 返回按钮图片 backItem.backButtonImage; 设置无效,只可隐藏or显示

           }

       }

   }

2.方式二,可以在viewWillAppear自定义整个返回区域AUBarButtonItem按钮、个数:

AUBarButtonItem *backItem = [AUBarButtonItem barButtonItemWithIconFontName:kICONFONT_BACK iconColor:[UIColor lightGrayColor] target:self action:@selector(custBack:)];  


AUBarButtonItem *backItem = [AUBarButtonItem backBarButtonItemWithTitle:@"测试" backArrowColor:[UIColor redColor] target:self action:@selector(custBack:)];

backItem.customView.frame = CGRectMake(0, 0, 44, 44);

       

AUBarButtonItem *closeItem = [AUBarButtonItem barButtonItemWithIconFontName:kICONFONT_SYSTEM_CANCEL_BOLD iconColor:[UIColor lightGrayColor] target:self action:@selector(custClose:)];

closeItem.customView.frame = CGRectMake(0, 0, 30, 44);

       

self.navigationItem.leftBarButtonItems = @[backItem,closeItem];

如果要修改BarButtonItem的文字大小、颜色等深度定制可以参考以下代码:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.frame = CGRectMake(0, 0, 40, 40);

[button setTitle:@"我的" forState:UIControlStateNormal];

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[button setBackgroundColor: [UIColor whiteColor]];

button.titleLabel.font = [UIFont systemFontOfSize:14.0f];

AUBarButtonItem *backItem = [[AUBarButtonItem alloc] initWithCustomView:button];

//返回按钮事件

- (void)custBack:(id)sender{

   NSLog(@"back -----");

   [self back];

}

//关闭所有session

- (void)custClose:(id)sender{

   NSLog(@"close   ------");

   NSArray *sessions = [[NBContext sharedContext] sessions];

   for (NBSession* session in sessions) {

       [[NBContext sharedContext] exitSession:session animated:YES];

   }

}

三.Native修改导航栏左侧关闭按钮

1.在自定义NBPluginBase 插件中关闭按钮需自行创建,监听kNBEvent_Scene_NavigationItem_Left_Close_Create_Before,在此监听事件中创建关闭按钮。

//监听kNBEvent_Scene_NavigationItem_Left_Close_Create_Before,在此监听事件中:

// 创建关闭按钮

[event preventDefault];

NBNavigationItemLeftCloseEvent *itemEvent = (NBNavigationItemLeftCloseEvent *)event;

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.frame = CGRectMake(0, 0, 44, 44);

button.backgroundColor = [UIColor whiteColor];

[button setTitle:@"关闭" forState:UIControlStateNormal];

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

itemEvent.customView = button;

监听kNBEvent_Scene_NavigationItem_Left_Close_Create_After,在此监听事件中修改关闭按钮样式。

//监听kNBEvent_Scene_NavigationItem_Left_Close_Create_After,在此监听事件中:

// 修改关闭按钮样式

[event preventDefault];

NBNavigationItemLeftCloseEvent *itemEvent = (NBNavigationItemLeftCloseEvent *)event;

UIButton *closeButton = (UIButton *)itemEvent.customView;

[closeButton setTitle:@"关闭" forState:UIControlStateNormal];

[closeButton setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];

四.Native修改导航栏标题

1.在viewWillAppear 获取自定义启动参数,根据参数自定义标题

//打开H5离线包

NSString *appId = @"20190927";

   [[MPNebulaAdapterInterface shareInstance]startH5ViewControllerWithNebulaApp:@{@"appId":appId,@"defaultTitle":@"测试",@"readTitle":@"NO",@"titleColor":@"ff0000",@"titleFont":@"18.0"}];//启动参数设置标题文案、颜色、大小;

这里的参数key值appId、defaultTitle、readTitle为框架默认不可修改,其余参数key值自定义。

- (void)viewWillAppear:(BOOL)animated {

   [super viewWillAppear:animated];

   // 当前页面的启动参数

   NSDictionary *expandParams = self.psdScene.createParam.expandParams;

   NSLog(@"[mpaas] expandParams: %@", expandParams);

   

   // 设置导航栏标题

   NSString *titleColorString = expandParams[@"titleColor"];

   NSString *titleFont = expandParams[@"titleFont"];

   if ([titleColorString isKindOfClass:[NSString class]] && [titleColorString length] > 0 && [titleFont length] > 0) {

       UIColor *titleColor = [UIColor colorFromHexString:titleColorString];

       id titleView =          self.navigationItem.titleView;

       [[titleView mainTitleLabel] setTextColor:titleColor];

       

       float font = [titleFont floatValue];

       [[titleView mainTitleLabel] setFont:[UIFont systemFontOfSize:font]];

       

   }

}

五.Native修改导航栏右侧按钮

1.NBPluginBase 插件中自定义修改

1.在NBPluginBase 中,监听kNBEvent_Scene_NavigationItem_Right_Setting_Create_Before,在此监听事件中创建导航栏右侧按钮。

//监听kNBEvent_Scene_NavigationItem_Right_Setting_Create_Before,在此监听事件中:

NBNavigationItemRightSettingEvent *settingEvent = (id)event;

settingEvent.adjustsWidthToFitText = YES;

settingEvent.maxWidth = [UIScreen mainScreen].bounds.size.width / 4.0f;

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.frame = CGRectMake(0, 0, 33, 40);

[button setTitle:@"设置" forState:UIControlStateNormal];

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[button setBackgroundColor: [UIColor whiteColor]];

settingEvent.customView = button;

[event preventDefault];

2.在NBPluginBase 中监听kNBEvent_Scene_NavigationItem_Right_Setting_Create_After,在此监听事件中修改导航栏右侧按钮。

//监听kNBEvent_Scene_NavigationItem_Right_Setting_Create_After,在此监听事件中:

NBNavigationItemRightSettingEvent *settingEvent = (id)event;

settingEvent.adjustsWidthToFitText = YES;

settingEvent.maxWidth = [UIScreen mainScreen].bounds.size.width / 4.0f;

UIButton *button = settingEvent.customView;

button.titleLabel.font = [UIFont systemFontOfSize:14.0f];

button.frame = CGRectMake(0, 0, 40, 40);

[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

[button setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];

[button setBackgroundColor: [UIColor whiteColor]];

[event stopPropagation];//去掉默认按钮图片

注:

1.在插件中自定义导航栏右侧按钮,必须要在打开H5容器的启动参数中设置@{@"showOptionMenu": @"YES"} 否则设置右侧按钮无效。

2.必须要在kNBEvent_Scene_NavigationItem_Right_Setting_Create_After监听事件中实现[event stopPropagation];否则showOptionMenu按钮的默认图片没有办法去掉。

2.H5容器中自定义修改

1.在viewWillAppear 获取自定义启动参数,根据参数自定义设置AUBarButtonItem按钮。

1.图片样式:

AUBarButtonItem *rightItem1 = [[AUBarButtonItem alloc] initWithImage:image1 style:UIBarButtonItemStylePlain target:self action:@selector(rightBarItemPressed1)];

AUBarButtonItem *rightItem2 = [[AUBarButtonItem alloc] initWithImage:image2 style:UIBarButtonItemStylePlain target:self action:@selector(rightBarItemPressed2)];

//单个按钮

self.navigationItem.rightBarButtonItem = rightItem1;

//多个按钮

self.navigationItem.rightBarButtonItems = @[rightItem1, rightItem2];

2.文字样式:

AUBarButtonItem *titleItem1 = [[AUBarButtonItem alloc]initWithTitle:@"按钮" style:UIBarButtonItemStylePlain target:self action:@selector(rightBarItemPressed1)];

AUBarButtonItem *titleItem2 = [[AUBarButtonItem alloc]initWithTitle:@"右侧" style:UIBarButtonItemStylePlain target:self action:@selector(rightBarItemPressed2)];

//单个按钮

self.navigationItem.rightBarButtonItem = rightItem1;

//多个按钮

self.navigationItem.rightBarButtonItems = @[titleItem1, titleItem2];

2.如果要修改BarButtonItem的文字大小、颜色等深度定制参考以下代码:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.frame = CGRectMake(0, 0, 40, 40);

[button setTitle:@"我的" forState:UIControlStateNormal];

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[button setBackgroundColor: [UIColor whiteColor]];

button.titleLabel.font = [UIFont systemFontOfSize:14.0f];

AUBarButtonItem *rightItem = [[AUBarButtonItem alloc] initWithCustomView:button];

五.Native 自定义导航栏

1.隐藏原生导航栏

自定义导航栏,要先隐藏原生导航栏。

//隐藏容器类navBar

self.options.showTitleBar = NO;

//隐藏系统层navBar

[self.navigationController setNavigationBarHidden:YES];

2.创建navBarView

1.创建AUCustomNavigationBar 初始化方法必须要navigationBarForCurrentVC: 否则按钮设置无效。

2.赋值给self.customNavigationBar 容器会自动适配H5页面高度,否则需自行适配页面。

//创建navBarView,必须要用此方法

AUCustomNavigationBar *navBar = [AUCustomNavigationBar navigationBarForCurrentVC:self];

[self.view addSubview:navBar];

//设置给容器VC

self.customNavigationBar = navBar;

3.自定义背景样式

设置背景色、渐变色等,setNavigationBarBlurEffective 设置毛玻璃效果,支持更多样式自选。

//设置背景颜色,渐变色可自行设置

navBar.backgroundColor = [UIColor lightGrayColor];

[navBar setNavigationBarBlurEffectiveWithStyle:UIBlurEffectStyleDark]; // 毛玻璃效果,更多样式自选

4.设置左侧导航按钮

1.设置左侧导航按钮方式一:

//导航左侧按钮

navBar.backButtonTitle = @"取消";

navBar.backTitleLabel.font = [UIFont systemFontOfSize:16.0];

navBar.backButtonTitleColor = [UIColor orangeColor];

navBar.backButtonImage = [UIImage imageNamed:@"back_button@2x"];

[navBar addSubview:navBar.leftItem];

2.设置左侧导航按钮,自行关联事件方式二,与方式一冲突,两者选其一。

//自行关联事件方式,与上述属性设置冲突。

//image和title两者选其一

[navBar setNavigationBarLeftItemWithImage:[UIImage imageNamed:@"back_button@2x"]target:self action:@selector(leftItemImageClick)];

[navBar setNavigationBarLeftItemWithTitle:@"取消" target:self action:@selector(leftItemTitleClick)];

5.设置导航栏标题

1.设置导航栏标题方式一:

//设置导航栏标题

navBar.title = @"标题";

navBar.titleColor = [UIColor redColor];

navBar.titleLabel.font = [UIFont systemFontOfSize:14.0];

2.设置导航栏标题,AUDoubleTitleView双标题titleView方式二:

//设置双标题titleView

AUDoubleTitleView *titleView = [[AUDoubleTitleView alloc]initWithTitle:@"主标题" detailTitle:@"副标题"];

navBar.titleView = titleView;

//这里使用了mPaaS下双标题UI,也可自行实现titleView

6.设置导航栏右侧按钮

1.单个右侧按钮

1.设置单个按钮方式一:

//设置导航右侧按钮

navBar.rightItemTitle = @"菜单";

navBar.rightItemTitleColor = [UIColor blackColor];

//image和title两者选其一

navBar.rightItemImage = [UIImage imageNamed:@"rightTT@2x"];

2.设置单个按钮方式二

//自行关联事件方式

//image和title两者选其一

[navBar setNavigationBarRightItemWithTitle:@"菜单" target:self action:@selector(rightItemTitleClick)];

[navBar setNavigationBarRightItemWithImage:[UIImage imageNamed:@"rightTT@2x"] target:self action:@selector(rightItemImageClick)];

2.深度自定义单、多个右侧按钮

深度自定义右侧按钮、文字、大小、图片,自行关联事件。

//深度自定义右侧按钮、文字、大小、图片、关联事件

AUButton *button = [AUButton buttonWithStyle:AUButtonStyleNone title:@"右一" target:self action:@selector(rightItemTitleClick)];

button.titleLabel.font = [UIFont systemFontOfSize:16.0];

[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

   

AUButton *button1 = [AUButton buttonWithStyle:AUButtonStyleNone];

[button1 setImage:[UIImage imageNamed:@"rightTT@2x"] forState:UIControlStateNormal];

navBar.rightItemList = @[button,button1];

目录
相关文章
|
7月前
|
小程序 网络安全 API
mpaas小程序问题之原生导航栏返回拦截如何解决
mPaaS小程序是阿里巴巴移动平台服务(mPaaS)推出的一种轻量级应用解决方案,旨在帮助开发者快速构建跨平台的小程序应用;本合集将聚焦mPaaS小程序的开发流程、技术架构和最佳实践,以及如何解决开发中遇到的问题,从而助力开发者高效打造和维护小程序应用。
140 0
|
移动开发 运维 前端开发
mPaaS-H5导航栏动态化修改
金融级移动开发平台 mPaaS(Mobile PaaS)为 App 开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。其中很多业务在接入H5容器后都会对容器的导航栏进行深度定制,除了Native的定制化之外,还有很多场景是使用到jsapi的方式,通过jsapi实现导航栏的动态修改。本文旨在通过实际场景的描述,通过jsapi的方式,介绍jsapi下怎样动态修改导航栏,供业务参考使用。
481 0
mPaaS-H5导航栏动态化修改
|
7月前
|
移动开发 监控 小程序
mPaaS常见问题之音视频通话微信小程序通话界面录制为画中画模式如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
107 0
|
7月前
|
缓存 小程序 Android开发
mPaaS问题之更改包名之后就进不了小程序如何解决
mPaaS小程序是阿里巴巴移动平台服务(mPaaS)推出的一种轻量级应用解决方案,旨在帮助开发者快速构建跨平台的小程序应用;本合集将聚焦mPaaS小程序的开发流程、技术架构和最佳实践,以及如何解决开发中遇到的问题,从而助力开发者高效打造和维护小程序应用。
134 1
|
7月前
|
Web App开发 移动开发 小程序
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,显示“网络不给力,请稍后再试”,预发内网版本不能使用,线上版本可以正常使用,这个是什么原因啊,是某些参数没有配置吗,还是说是一些参数改错了?
118 2
|
7月前
|
小程序 安全 算法
mPaaS问题之使用小程序传参数报错如何解决
mPaaS小程序是阿里巴巴移动平台服务(mPaaS)推出的一种轻量级应用解决方案,旨在帮助开发者快速构建跨平台的小程序应用;本合集将聚焦mPaaS小程序的开发流程、技术架构和最佳实践,以及如何解决开发中遇到的问题,从而助力开发者高效打造和维护小程序应用。
123 2
|
7月前
|
移动开发 安全 小程序
mpaas常见问题之小程序容器,跑起来后一直提示 "网络不给力, 请稍后再试"如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
134 0
|
7月前
|
小程序 Android开发 iOS开发
mPaaS问题之Ios调小程序报错如何解决
mPaaS小程序是阿里巴巴移动平台服务(mPaaS)推出的一种轻量级应用解决方案,旨在帮助开发者快速构建跨平台的小程序应用;本合集将聚焦mPaaS小程序的开发流程、技术架构和最佳实践,以及如何解决开发中遇到的问题,从而助力开发者高效打造和维护小程序应用。
mPaaS问题之Ios调小程序报错如何解决
|
移动开发 小程序 安全
mPaaS 小程序多端开发| 学习笔记
快速学习 mPaaS 小程序多端开发。
mPaaS 小程序多端开发| 学习笔记
|
小程序

热门文章

最新文章