范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

技术干货Native页面下如何实现导航栏的定制化开发?

  很多 mPaaS Coder 在接入 H5 容器后都会对容器的导航栏进行深度定制,本文旨在通过不同实际场景的描述,供大家参考完成 Native 页面的定制化开发。 Native 修改导航栏左侧返回按钮
  (一)自定义 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];     } }
  (二)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 修改导航栏左侧关闭按钮
  (一)在自定义 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 修改导航栏标题
  (一)在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 修改导航栏右侧按钮
  (一)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按钮的默认图片没有办法去掉。
  (二)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 自定义导航栏
  (一)隐藏原生导航栏
  自定义导航栏,要先隐藏原生导航栏。  //隐藏容器类navBar self.options.showTitleBar = NO; //隐藏系统层navBar [self.navigationController setNavigationBarHidden:YES];
  (二)创建 navBarView 创建 AUCustomNavigationBar 初始化方法必须要 navigationBarForCurrentVC: 否则按钮设置无效。  赋值给 self.customNavigationBar 容器会自动适配H5页面高度,否则需自行适配页面。  //创建navBarView,必须要用此方法 AUCustomNavigationBar *navBar = [AUCustomNavigationBar navigationBarForCurrentVC:self]; [self.view addSubview:navBar]; //设置给容器VC self.customNavigationBar = navBar;
  (三)自定义背景样式
  设置背景色、渐变色等,setNavigationBarBlurEffective 设置毛玻璃效果,支持更多样式自选。  //设置背景颜色,渐变色可自行设置 navBar.backgroundColor = [UIColor lightGrayColor]; [navBar setNavigationBarBlurEffectiveWithStyle:UIBlurEffectStyleDark]; // 毛玻璃效果,更多样式自选
  (四)设置左侧导航按钮
  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)];
  (五)设置导航栏标题
  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
  (六)设置导航栏右侧按钮
  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];
  作者:阿里云 mPaaS TAM 团队(石鹏飞 荣阳)
  原文链接:http://click.aliyun.com/m/1000298581/
  本文为阿里云原创内容,未经允许不得转载。

宋MAX升级版VS五菱凯捷,谁才是最懂家人的MPV?最近,抖音人类高质量挑战话题出圈。今天,我们沿用此话题,并选取了两款10万级热门家用MPV车型,它们分别是宋MAX升级版1。5T自动旗舰型7座车型,以及五菱凯捷1。5T自动旗舰型商不惧安全挑战,比亚迪汉实力亮剑CIASI汽车碰撞测试是衡量车辆安全性非常重要的检测手段,日前,中国保险汽车安全指数(CIASI)公布新一批车型测评成绩,引起行业对汽车安全话题的关注和探讨。在众多测评车型中,汉作为比亚迪推外观设计与配置升级吉利新豪越开启预售10。36万起10月8日,吉利新豪越开启预售,新车将推出4款不同配置,预售区间为10。36万13。96万元。从官图来看,该车沉稳又不失帅气。曾经的涟漪样式中网变成了直瀑式格栅,并增加了较多的镀铬预计售价15万左右2022款宋ProDMi外观内饰全面升级近日,比亚迪官方发布了2022款宋ProDMi的部分外观和内饰细节图。新车在多个方面都有升级,显得更加具备质感。配色方面,2022款宋ProDMi外观新增了全新的穹顶蓝配色,整车焕拯救者电竞手机Pro将全球首发骁龙865Plus,独特外观仅此一款近日有不少主打游戏的新机正在预热筹备中,其中搭载高通骁龙865Plus处理器的拯救者电竞手机Pro将要率先跟我们见面了。非同寻常的独特外观很吸眼球,中置弹出前摄的设计还是全球首款,5。4英寸iPhone12屏幕曝光,整机比iPhoneSE二代更小众所周知,苹果将在今年9月8日正式推出iPhone12系列新品手机,其中包括5。4英寸的iPhone126。1英寸的iPhone12Max6。1英寸的iPhone12Pro及6。8教程MSIAfterburnerFPS显示基础设置教程(OSD界面设置)MSIAfterburner的FPS显示基础设置教程MSIAfterburner具体是个啥,干嘛用的,大家应该心知肚明。但是对仅仅需要FPS的显示和其他硬件使用情况显示附带检测功能反击AMDEPYC,英特尔SapphireRapidsHBM版首次亮相众所周知,Intel现在正展开对AMD绝地反击战,除了桌面产品方面布局了最新的AlderLake十二代酷睿处理器外,服务器产品线方面的XeonScalable也有代号Sapphir8K60P,尼康真旗舰Z9无反相机12月开卖这个月里虽然有万众期待的的索尼A7M4发布,但是却难掩尼康这边Z9的预热势头,连续三条预热视频体现出来的强大特性吊足了大家的胃口,而在日前nikonrumors发布了最新的Z9规格基于谷歌TPU,华硕推出PCIEAI加速卡AI加速芯片已经成为近几年来最热门的芯片产业,目前的主要参与者有NVIDIA以及谷歌,相对于前者铺天盖地的GPU来说,之前谷歌的TPU主要用于系统集成领域,以云服务器的方式提供给用镜头荒即将结束?尼康28号还将发布FTZII和多款镜头再过两天尼康就会发布可能是今年最强的旗舰无反相机Z9,不过除了机身意外,这次发布会活动还将有多款其他产品。按照社交软件会员nokishitac的说法,尼康这次将会发布多款镜头以及第
Conformis,Inc。宣布在中国签订独家分销协议新协议扩展了Conformis的全球业务范围,为亚太地区最大的市场提供适应患者具体需求的膝关节置换系统Conformis,Inc。(纳斯达克股票代码CFMS)今天宣布执行一项通过与人脸识别你需要的人工智能生物识别AI数据集全在这里一。生物识别技术定义生物识别技术主要是指通过人类生物特征进行身份认证的一种技术,即利用人体固有的生物特性,如人脸,指纹虹膜掌纹指静脉等和行为特征,如笔迹声音步态等来进行个人身份的鉴极具探索意义的超高屏占比,Amazfit跃我GTR3Pro外观体验10月12日,在Amazfit新品发布会上,华米科技正式宣布品牌焕新,公布了新的品牌Logo品牌标语以及品牌中文名跃我。作为Amazfit跃我六周年向上而生的新起点,第三代Amaz以西为鉴,中国操作系统生态发展之路亿欧导读以西为鉴,操作系统的生态建设,决定了其产品的成败。国际操作系统巨头的生存方式对我们有什么借鉴意义,而我国操作系统代表企业的生态现状如何,我们应该要有清醒的认识。一生态决定了Pico进驻中国扩展亚太区业务英商雳科(上海)信息科技有限公司已获得上海市监管局颁发的外商独资企业(WFOE)营业执照,主要在中国提供技术服务英商雳科(Pico)作为一间在金融市场上领先并具知名度的技术服务供应NikkisoCryogenicServices宣布AsasAljood为提供商NikkisoCryogenicServices宣布AsasAljood(沙特)成为其授权服务提供商NikkisoCo。,Ltd。子公司NikkisoCryogenicIndust教育硬件赛道迎机遇,读书郎打造多品类AI产品矩阵随着开学季钟声的敲响,双减政策稳步推进,在该政策的影响下,无数教培机构关停,智能教育硬件成为了当下许多企业转型的新机遇,众多企业纷纷涌入,他们或有资本或有技术或有流量。如何在双减政管理专业研究生入学委员会欢迎董事会新成员管理专业研究生入学委员会欢迎董事会新成员新增成员反映出商学院社区的多元化全球视角由全球领先研究生商学院组成的管理专业研究生入学委员会(GMAC)今天宣布新增四位董事会成员。欧洲工商教你检测二手苹果设备1。快递验收收到快递以后,当面检验包裹外观是否有变形或者损坏,胶带密封防止手机被掉包和丢失。首先检查包裹是否完好无损检查手机机身是否良好和描述相符检查手机底部螺丝有无明显痕迹手机可2021杭州智博会专业科技会展看向西湖边建设四个现代化,这句话对00后的新一代已经是完全陌生的口号了。但科技现代化在进入二十一世纪第三个十年的今天,早已是我们工作生活和社会发展的重要组成部分。要想在短时间内了解科技产业热Accelerate宣布启动数字平台作为一个会员驱动型社区,Accelerate是HIMSS的起源和基础的自然延伸芝加哥,July29,2021今天,Accelerate作为一个专门构建的数字平台进军全球健康生态系统