问题描述
用户反馈:不要在页面内容中自定义导航栏,而是要在uni-app的原生顶部导航栏中实现返回键功能,类似微信小程序的标准导航栏样式。
解决方案
1. ✅ 移除自定义导航栏
问题分析
之前的实现在页面内容中添加了自定义的顶部导航栏,这不符合uni-app和微信小程序的标准设计模式。用户期望使用原生导航栏的返回按钮。
优化方案
移除页面中的自定义导航栏组件和相关样式:
删除的自定义导航栏结构:
<!-- 删除:自定义顶部导航栏 -->
<view class="top-navigation">
<view class="nav-left">
<view class="back-button" @click="backToWelcome">
<text class="back-icon">⬅️</text>
</view>
</view>
<view class="nav-center">
<text class="nav-title">查询结果</text>
</view>
<view class="nav-right">
<!-- 预留右侧操作区域 -->
</view>
</view>
删除的相关样式:
/* 删除:自定义导航栏样式 */
.top-navigation {
display: flex;
align-items: center;
justify-content: space-between;
height: 88rpx;
background: #4285f4;
/* ... 其他样式 */
}
2. ✅ 配置原生导航栏
pages.json配置
确认pages.json中已正确配置原生导航栏:
{
"path": "pages/reservation/searchResult/searchResult",
"style": {
"navigationBarTitleText": "查询结果",
"navigationBarBackgroundColor": "#0081ff",
"navigationBarTextStyle": "white",
"enablePullDownRefresh": false,
"disableScroll": false,
"onReachBottomDistance": 50,
"backgroundTextStyle": "dark"
}
}
关键配置说明:
navigationBarTitleText
: 设置导航栏标题为"查询结果"
navigationBarBackgroundColor
: 设置导航栏背景色为蓝色主题
navigationBarTextStyle
: 设置导航栏文字为白色
- 没有设置
navigationStyle: "custom"
,确保使用原生导航栏
3. ✅ 实现返回逻辑
修改返回方法
将原来的界面切换逻辑改为页面返回逻辑:
修改前:
backToWelcome() {
// 重置所有状态
this.resetAllFilters();
// 重置搜索相关状态
this.searchKeyword = '';
// ... 复杂的状态重置逻辑
// 切换到欢迎界面
}
修改后:
backToWelcome() {
// 使用uni.navigateBack()返回上一页
uni.navigateBack({
delta: 1
});
}
添加返回按钮监听
使用onBackPress生命周期方法监听原生返回按钮:
// 监听页面返回按钮
onBackPress(options) {
// 如果当前显示的是功能界面,则返回到欢迎界面
if (!this.showWelcomeInterface) {
// 重置所有状态,返回到欢迎界面
this.resetAllFilters();
// 重置搜索相关状态
this.searchKeyword = '';
this.hasPerformedSearch = false;
// 恢复原始数据
this.reservationList = [...this.originalList];
this.updateStatistics();
// 优先显示搜索历史,如果没有历史记录则显示关键词搜索
if (this.searchHistory && this.searchHistory.length > 0) {
this.showSearchHistory = true;
this.showHotSearch = false;
} else {
this.showSearchHistory = false;
this.showHotSearch = true;
}
this.showSuggestions = false;
// 返回true表示阻止默认返回行为
return true;
}
// 如果当前显示的是欢迎界面,则允许正常返回
return false;
}
4. ✅ 页面布局调整
移除自定义导航栏后的布局
简化功能界面的结构:
修改前:
<view class="functional-section">
<!-- 自定义顶部导航栏 -->
<view class="top-navigation">...</view>
<!-- 内容区域 -->
<view class="function-header">...</view>
</view>
修改后:
<view class="functional-section">
<!-- 内容区域 -->
<view class="function-header">...</view>
</view>
样式优化
简化functional-section的样式:
.functional-section {
padding: 0;
display: flex;
flex-direction: column;
flex: 1;
overflow: hidden;
height: 100vh;
}
优化效果
用户体验改进
- 标准化体验:使用uni-app原生导航栏,符合微信小程序标准
- 一致性:与其他页面的导航栏样式保持一致
- 系统集成:返回按钮与系统手势和硬件返回键完全集成
- 性能优化:减少自定义组件,提升页面性能
功能特性
- 原生返回按钮:
-
- 自动显示在导航栏左侧
-
- 支持点击返回
-
- 支持手势返回(iOS)
-
- 支持硬件返回键(Android)
- 智能返回逻辑:
-
- 功能界面状态:返回到欢迎界面
-
- 欢迎界面状态:返回到上一页面
- 状态管理:
-
- 返回时自动重置搜索状态
-
- 恢复原始数据显示
-
- 重置筛选条件
技术实现
- 生命周期管理:使用onBackPress监听返回事件
- 状态控制:通过返回值控制是否阻止默认返回行为
- 数据重置:确保返回时页面状态正确重置
测试建议
功能测试
- 导航栏显示:
-
- 确认原生导航栏正常显示
-
- 确认标题为"查询结果"
-
- 确认背景色为蓝色主题
- 返回功能:
-
- 点击导航栏返回按钮,确认功能正常
-
- 在功能界面时,确认返回到欢迎界面
-
- 在欢迎界面时,确认返回到上一页
- 手势支持:
-
- iOS设备测试滑动返回手势
-
- Android设备测试硬件返回键
兼容性测试
- 不同平台:
-
- 微信小程序
-
- H5
-
- App(iOS/Android)
- 不同设备:
-
- 不同屏幕尺寸
-
- 不同系统版本
状态测试
- 搜索状态:
-
- 有搜索内容时返回,确认状态重置
-
- 有筛选条件时返回,确认筛选清除
- 数据状态:
-
- 确认返回时数据恢复到原始状态
-
- 确认统计信息正确更新
后续优化建议
- 导航栏定制:
-
- 可考虑添加右侧操作按钮
-
- 可考虑动态修改标题
- 返回逻辑优化:
-
- 可考虑添加返回确认对话框
-
- 可考虑保存用户的搜索状态
- 用户体验:
-
- 可考虑添加返回动画效果
-
- 可考虑优化页面切换过渡
总结
通过移除自定义导航栏并使用uni-app原生导航栏,实现了:
- 标准化:符合微信小程序和uni-app的设计规范
- 简化:减少了自定义组件和样式代码
- 集成:与系统返回机制完全集成
- 一致性:与应用其他页面保持一致的导航体验
现在用户可以看到标准的原生导航栏,包含蓝色背景、白色标题"查询结果",以及左侧的返回按钮,完全符合微信小程序的标准设计。