uni-app 之 设置导航

uni-app 提供了一系列 API 来动态设置页面导航栏的样式和状态,帮助开发者创建更丰富的用户界面体验。

1. uni.setNavigationBarTitle(OBJECT)

动态设置当前页面的标题

参数说明
属性 类型 必填 说明
title string 页面标题
success function 接口调用成功的回调函数
fail function 接口调用失败的回调函数
complete function 接口调用结束的回调函数
示例代码
javascript 复制代码
uni.setNavigationBarTitle({
  title: "新的页面标题",
});

2. uni.setNavigationBarColor(OBJECT)

设置页面导航条颜色

参数说明
属性 类型 默认值 必填 说明
frontColor string 前景颜色值,包括按钮、标题、状态栏的颜色,仅支持 #ffffff 和 #000000
backgroundColor string 背景颜色值,有效值为十六进制颜色
animation object 动画效果
success function 接口调用成功的回调函数
fail function 接口调用失败的回调函数
complete function 接口调用结束的回调函数
animation 参数说明
属性 类型 默认值 说明
duration number 0 动画变化时间,默认为 0,单位:毫秒
timingFunc string 'linear' 动画变化方式,支持 linear、easeIn、easeOut、easeInOut
示例代码
javascript 复制代码
// 设置导航栏颜色
uni.setNavigationBarColor({
  frontColor: "#ffffff",
  backgroundColor: "#007AFF",
  animation: {
    duration: 400,
    timingFunc: "easeIn",
  },
});

3. uni.showNavigationBarLoading(OBJECT)

在当前页面显示导航条加载动画

参数说明
属性 类型 必填 说明
success function 接口调用成功的回调函数
fail function 接口调用失败的回调函数
complete function 接口调用结束的回调函数
示例代码
javascript 复制代码
// 显示导航栏加载动画
uni.showNavigationBarLoading();

4. uni.hideNavigationBarLoading(OBJECT)

隐藏导航条加载动画

参数说明
属性 类型 必填 说明
success function 接口调用成功的回调函数
fail function 接口调用失败的回调函数
complete function 接口调用结束的回调函数
示例代码
javascript 复制代码
// 隐藏导航栏加载动画
uni.hideNavigationBarLoading();

5. uni.hideHomeButton(OBJECT)

隐藏返回首页按钮

参数说明
属性 类型 必填 说明
success function 接口调用成功的回调函数
fail function 接口调用失败的回调函数
complete function 接口调用结束的回调函数
示例代码
javascript 复制代码
// 隐藏返回首页按钮
uni.hideHomeButton();

完整示例

javascript 复制代码
export default {
  data() {
    return {
      pageTitle: "商品详情",
    };
  },

  onLoad() {
    // 设置页面标题
    uni.setNavigationBarTitle({
      title: this.pageTitle,
    });

    // 设置导航栏颜色
    uni.setNavigationBarColor({
      frontColor: "#ffffff",
      backgroundColor: "#007AFF",
    });
  },

  methods: {
    // 页面数据加载
    loadData() {
      // 显示导航栏加载动画
      uni.showNavigationBarLoading();

      // 模拟异步请求
      setTimeout(() => {
        // 隐藏导航栏加载动画
        uni.hideNavigationBarLoading();

        // 更新页面标题
        uni.setNavigationBarTitle({
          title: "最新商品详情",
        });
      }, 2000);
    },

    // 改变导航栏主题
    changeTheme(theme) {
      if (theme === "light") {
        uni.setNavigationBarColor({
          frontColor: "#000000",
          backgroundColor: "#ffffff",
        });
      } else if (theme === "dark") {
        uni.setNavigationBarColor({
          frontColor: "#ffffff",
          backgroundColor: "#007AFF",
        });
      }
    },

    // 隐藏返回首页按钮
    hideHomeButton() {
      uni.hideHomeButton({
        success: () => {
          console.log("返回首页按钮已隐藏");
        },
      });
    },
  },
};

页面配置方式

除了使用 API,也可以在页面的 .vue 文件中通过配置来设置导航栏:

javascript 复制代码
export default {
  style: {
    navigationBarTitleText: "页面标题",
    navigationBarBackgroundColor: "#007AFF",
    navigationBarTextStyle: "white",
    navigationStyle: "default", // 'default' 或 'custom'
  },
};

注意事项

  1. frontColor 仅支持 #ffffff#000000 两种颜色值
  2. backgroundColor 必须是有效的十六进制颜色值
  3. 在 Android 平台上,某些机型可能不支持动态修改导航栏颜色
  4. hideHomeButton 仅在微信小程序等特定平台有效
  5. 导航栏加载动画在不同平台的表现可能略有差异
  6. 页面跳转时,导航栏设置会恢复为页面配置中的默认值
  7. 使用 custom 导航栏样式时,需要自行实现导航栏布局

实际应用场景

javascript 复制代码
// 商品详情页示例
export default {
  methods: {
    async loadProductDetail(productId) {
      // 显示加载状态
      uni.showNavigationBarLoading();
      uni.setNavigationBarTitle({ title: "加载中..." });

      try {
        const product = await this.fetchProduct(productId);

        // 加载完成后更新标题
        uni.setNavigationBarTitle({
          title: product.name,
        });

        // 根据商品状态改变导航栏颜色
        if (product.status === "onsale") {
          uni.setNavigationBarColor({
            frontColor: "#ffffff",
            backgroundColor: "#4CD964", // 绿色表示在售
          });
        } else {
          uni.setNavigationBarColor({
            frontColor: "#000000",
            backgroundColor: "#FF9500", // 橙色表示缺货
          });
        }
      } catch (error) {
        uni.setNavigationBarTitle({ title: "加载失败" });
        uni.showToast({ title: "获取商品信息失败", icon: "none" });
      } finally {
        uni.hideNavigationBarLoading();
      }
    },
  },
};
相关推荐
iOS阿玮5 小时前
开工第一天,别让AI写的代码触发3.2f封号。
uni-app·app·apple
特立独行的猫a11 小时前
uniapp-x的HarmonyOS鸿蒙应用开发:tabbar底部导航栏的实现
华为·uni-app·harmonyos·鸿蒙·uniapp-x
迪巴拉152511 小时前
基于Yolov8训练的Flask后端和Uniapp野生菌识别系统
yolo·flask·uni-app
中国胖子风清扬6 天前
GPUI 在 macOS 上编译问题排查指南
spring boot·后端·macos·小程序·rust·uni-app·web app
码云数智-园园7 天前
uni-app 实现物流进度跟踪功能:从 UI 到数据驱动的完整方案
ui·uni-app
予你@。9 天前
UniApp + Vue3 实现 Tab 点击滚动定位(微信小程序)
微信小程序·小程序·uni-app
游戏开发爱好者89 天前
完整教程:App上架苹果App Store全流程指南
android·ios·小程序·https·uni-app·iphone·webview
予你@。9 天前
uni-app progress 组件使用详解
uni-app
iOS阿玮9 天前
春节提审高峰来袭!App Store 审核时长显著延长。
uni-app·app·apple
2501_916007479 天前
ios上架 App 流程,证书生成、从描述文件创建、打包、安装验证到上传
android·ios·小程序·https·uni-app·iphone·webview