自定义导航栏

自 10.1.60 版本基线起,iOS 小程序支持对导航栏进行自定义,您可以对导航栏中的标题、背景、返回按钮、右侧的设置和关闭按钮进行自定义。本文将向您详细介绍关于自定义 iOS 小程序导航栏的方法。

自定义导航栏背景和标题

全局自定义导航栏背景和标题

如果您要全局自定义小程序所有页面默认导航栏背景和标题,则需要在 app.json 中修改 window 配置。

  • 导航栏隐藏:您需要自定义 JSAPI 实现。

  • 导航栏透明:"transparentTitle": "always"

  • 导航栏渐变:"transparentTitle": "auto"

  • 导航栏颜色:"titleBarColor": "#f00"

  • 导航栏标题文案:"defaultTitle": "Alert"

  • 导航栏标题颜色:在 H5 基类的 viewWillAppear 方法的 super 之中,修改当前页面 titleView 的样式。

    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];   
        ...
        BOOL isTinyApp = [NBUtils isTinyAppWithSession:self.psdSession];
        if (isTinyApp) {
            id<NBNavigationTitleViewProtocol> titleView = self.navigationItem.titleView;
            [[titleView mainTitleLabel] setFont:[UIFont systemFontOfSize:16]];
            [[titleView mainTitleLabel] setTextColor:[UIColor redColor]];
        }
     }
  • 导航栏标题图片:"titleImage": "https://pic.alipayobjects.com/e/201212/1ntOVeWwtg.png"

  • 导航栏标题位置:请参考以下代码进行实现。

    - (NSDictionary *)nebulaCustomConfig
    {
        NSString* leftConfig = @"{\"enable\":true,\"appIdBlacklist\":[],\"appIdWhitelist\":[\".*\"]}";
        return @{@"h5_tinyAppTitleViewAlignLeftConfig" : leftConfig };
    }

自定义某一页面导航栏背景和标题

如果您要自定义小程序中某一页面的导航栏背景和标题,则需要在该页面的 .json 中配置。

  • 导航栏隐藏:您需要自定义 JSAPI 实现。

  • 导航栏透明:"transparentTitle": "always"

  • 导航栏渐变:"transparentTitle": "auto"

  • 导航栏颜色:"titleBarColor": "#f00"

  • 导航栏标题文案:"defaultTitle": "Alert"

  • 导航栏标题颜色:您需要自定义 JSAPI,在 JSAPI 中修改当前页面 titleView 的样式。

- (void)handler:(NSDictionary *)data context:(PSDContext *)context callback:(PSD JSAPI ResponseCallbackBlock)callback
{
    [super handler:data context:context callback:callback];

     // 可以通过data传递字体、颜色等  
    id<NBNavigationTitleViewProtocol> titleView = context.currentViewController.navigationItem.titleView;
    [[titleView mainTitleLabel] setFont:[UIFont systemFontOfSize:16]];
    [[titleView mainTitleLabel] setTextColor:[UIColor redColor]];
}
  • 导航栏标题图片:"titleImage": "https://pic.alipayobjects.com/e/201212/1ntOVeWwtg.png"

动态修改当前页面的导航栏背景和标题

如果您要动态修改当前页面的导航栏背景和标题,则需要调用 my.setNavigationBar 进行配置。

  • 导航栏隐藏:您需要自定义 JSAPI 实现。

  • 导航栏透明:不支持。

  • 导航栏渐变:不支持。

  • 导航栏颜色:"backgroundColor": "#f00"

  • 导航栏标题文案:"title": "新标题"

  • 导航栏标题颜色:您需要自定义 JSAPI,在 JSAPI 中修改当前页面 titleView 的样式。

    - (void)handler:(NSDictionary *)data context:(PSDContext *)context callback:(PSD JSAPI ResponseCallbackBlock)callback
    {
        [super handler:data context:context callback:callback];
    
         // 可以通过 data 传递字体、颜色等
        id<NBNavigationTitleViewProtocol> titleView = context.currentViewController.navigationItem.titleView;
        [[titleView mainTitleLabel] setFont:[UIFont systemFontOfSize:16]];
        [[titleView mainTitleLabel] setTextColor:[UIColor redColor]];
    }
  • 导航栏标题图片:"image": "https://pic.alipayobjects.com/e/201212/1ntOVeWwtg.png"

自定义导航栏返回按钮

如果您要全局修改返回按钮样式,则需要在 H5 基类的 viewWillAppear 方法的 super 之中,修改当前页面 leftBarButtonItem 样式。可修改的样式包含以下内容,您可以参考下方代码段以获得更多指导。

  • 修改返回箭头和文案颜色

  • 修改返回箭头样式和文字内容

  • 隐藏返回箭头

  • 隐藏返回文案

    // 修改左侧返回按钮样式
    AUBarButtonItem *backItem = self.navigationItem.leftBarButtonItem;
    if ([backItem isKindOfClass:[AUBarButtonItem class]]) {
        // 在默认返回按钮基础上,修改返回箭头和文案颜色
        backItem.backButtonColor = [UIColor greenColor];
        backItem.titleColor = [UIColor colorFromHexString:@"#00ff00"];
    
        // 修改返回箭头样式和文字内容
        // backItem.backButtonTitle = @"回退";
        // backItem.backButtonImage = [UIImage imageNamed:@"APCommonUI.bundle/add"];
    
        // 隐藏返回箭头
        // backItem.hideBackButtonImage = YES;
    
        // 隐藏返回文案:文案设置为透明,保留返回按钮的点击区域
        // backItem.titleColor = [UIColor clearColor];
    }

导航栏右侧设置和关闭按钮

全局修改右侧按钮图片和颜色

如果您要修改右侧按钮图片和颜色,则需要引入头文件 #import <TinyappService/TASUtils.h> 并进行如下配置。

  • 修改关闭按钮颜色:[TASUtils sharedInstance].customItemColor = [UIColor redColor]

  • 修改关闭按钮图片:[TASUtils sharedInstance].customCloseImage = [UIImage imageNamed:@"xx"]

  • 显示分享按钮:[TASUtils sharedInstance].shoulShowSettingMenu = YES

  • 修改分享按钮图片:[TASUtils sharedInstance].customSettingImage = [UIImage imageNamed:@"xx"]

  • 修改分享按钮颜色:[TASUtils sharedInstance].customItemColor = [UIColor redColor]

全局修改右侧按钮样式

如果您要全局修改右侧按钮样式,则需要在 H5 基类的 viewwillAppear 中,重写当前页面的 rightBarButtonItem

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];   
    ...
    BOOL isTinyApp = [NBUtils isTinyAppWithSession:self.psdSession];
    if (isTinyApp) {
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"关闭" style:UIBarButtonItemStylePlain target:self action:@selector(onClickClose)];
    }
 }

- (void)onClickClose
{
    [TASUtils exitTinyApplication:self.appId];
}