uni-app app端侧滑返回功能不生效

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app app端侧滑返回功能不生效

开发环境 版本号 项目创建方式
Mac macOS 12.6.7 HBuilderX

操作步骤:

{
"path": "pages/dynamic/detail",
"style": {
"navigationBarTitleText": "详情",
"app-plus":{
"popGesture":"close"
}
}
}

预期结果:

  • 从其它页面跳转到detail页面,在detail页时侧滑返回

实际结果:

  • 从其它页面跳转到detail页面,在detail页时侧滑不生效

bug描述:

  1. 在detail页面设置了:
    {
    "path": "pages/dynamic/detail",
    "style": {
    "navigationBarTitleText": "详情",
    "app-plus":{
    "popGesture":"close"
    }
    }
    }  

2 回复

“app-plus”: {
“popGesture”: “close”
} 是在App-iOS 生效的,其实android 和 ios 默认是可以侧滑返回的,可以检查 onBackPress 事件,有没有代码影响


在 uni-app 中,如果你在 App 端(即使用原生渲染的 H5+ 或 Weex 渲染引擎)发现侧滑返回功能不生效,可能是由于以下几个原因导致的。以下是一些常见的排查和解决方法:


1. 确认是否启用了侧滑返回功能

  • pages.json 中,确保页面配置了 "enablePullDownRefresh": false,因为下拉刷新和侧滑返回功能是互斥的。
  • pages.json 中,确认页面是否配置了 "navigationBarTitleText",如果没有配置标题,可能会导致侧滑返回失效。
{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "navigationBarTitleText": "首页",
        "enablePullDownRefresh": false
      }
    }
  ]
}

2. 检查页面层级

  • 如果页面中存在 mapvideo 等原生组件,可能会覆盖侧滑返回手势,导致功能失效。
  • 解决方法:尽量避免在这些组件上使用侧滑返回,或者通过其他方式实现返回逻辑。

3. 检查是否禁用了侧滑返回

  • 在某些情况下,你可能通过代码禁用了侧滑返回功能。检查是否有类似以下的代码:
uni.navigateBack({
  delta: 1,
  animationType: "none" // 禁用动画
});
  • 确保 animationType 没有被设置为 "none",否则会影响侧滑返回的效果。

4. 检查是否使用了自定义导航栏

  • 如果页面使用了自定义导航栏("navigationStyle": "custom"),可能会导致侧滑返回功能失效。
  • 解决方法:如果必须使用自定义导航栏,可以手动监听手势事件,实现类似的返回功能。

5. 检查是否开启了全屏模式

  • 如果页面开启了全屏模式(例如通过 plus.navigator.setFullscreen(true)),可能会导致侧滑返回功能失效。
  • 解决方法:关闭全屏模式,或者在退出全屏时重新启用侧滑返回。

6. 检查是否使用了原生页面

  • 如果页面是通过原生方式打开的(例如通过 plus.webview.create),可能会导致侧滑返回功能失效。
  • 解决方法:尽量使用 uni-app 的页面路由机制(uni.navigateTouni.redirectTo 等)。

7. 检查是否使用了第三方插件

  • 如果使用了第三方插件(例如自定义导航栏插件),可能会导致侧滑返回功能失效。
  • 解决方法:检查插件文档,确认是否有相关配置或冲突。

8. 检查设备或系统问题

  • 在某些设备或系统版本上,侧滑返回功能可能会因为系统限制而不生效。
  • 解决方法:尝试在其他设备或系统版本上测试,确认是否为设备或系统问题。

9. 手动实现侧滑返回

如果以上方法无法解决问题,可以尝试通过监听手势事件,手动实现侧滑返回功能。例如:

let startX = 0;
document.addEventListener("touchstart", (e) => {
  startX = e.touches[0].clientX;
});
document.addEventListener("touchend", (e) => {
  const endX = e.changedTouches[0].clientX;
  if (endX - startX > 100) {
    uni.navigateBack();
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!