收藏
回答

如何解决打开半屏小程序时自定义导航栏的statusBarHeight为0的问题?

使用wx.openEmbeddedMiniProgram打开半屏小程序时,自定义导航栏 statusBarHeight 为0,没有任何问题,关键是切换为全屏小程序时,自定义导航头的高度缺少 statusBarHeight,高度被压缩变形,导致整个页面样式异常,影响相关功能:例如吸顶等。

自定义导航栏高度是由状态栏高度+胶囊高度+胶囊边距组成的自定义导航栏高度。其中状态栏高度在半屏的情况下为 0,全屏正常。优先打开全屏,则半屏高度异常,优先打开半屏,则全屏高度异常,自定义导航栏高度在不同的屏幕下高度无法同步。

回答关注问题邀请回答
收藏

3 个回答

  • showms
    showms
    2023-07-13

    你的导航栏应该是一个自定义组件吧?骚一点的做法可以是注册一个事件,如果wx.getEnterOptionsSync拿到apiCategory已经发生变化,这时候发送一个事件,自定义导航栏那边接收然后更新高度

    2023-07-13
    有用
    回复 1
    • A🌈小韩
      A🌈小韩
      2023-07-14
      硬要处理可以处理,但是需要深入到每一个页面,每一个组件,我觉得能在半屏获取到全屏的导航头参数我都能接受,而且 Android 可以看到,整个线程都变成了半屏小程序的线程
      2023-07-14
      回复
  • 似水流年
    似水流年
    2023-07-13

    声明全局变量`apiCategory`为`null`,`app.onLaunch`时赋值`apiCategory`,`app.onShow`时再赋值,确保冷启动、热启动都能给`apiCategory`赋值。然后监听`apiCategory`,发生变化时调用`wx.getWindowInfo`获取窗口信息,这样可行否?

    另外可关注下 [wx.onApiCategoryChange](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.onApiCategoryChange.html)这个新接口,2.33.0+可用来监听`apiCategory`的变化


    2023-07-13
    有用
    回复 2
    • A🌈小韩
      A🌈小韩
      2023-07-13
      根本问题不在是否能获取到`apiCategory`,这个可以通过`wx.getEnterOptionsSync()`获取到,但是没有办法全局更新到所有使用的地方,比如已加载再线程中的 page 中使用的 navHeight 是固定的,更新的话需要深入到对应的组件内,页面内。全局的组件,也无法通过 globalData 来渲染页面。
      2023-07-13
      回复
    • 似水流年
      似水流年
      2023-07-27回复A🌈小韩
      楼主你好,附上本人亲自验证(Android&IOS)的真机截图:
      【截图一】通过A小程序以半屏模式打开B小程序;

      【截图二】再点击B小程序右上角圆圈退出(返回至A小程序),然后通过A小程序以全屏模式跳转至B小程序。胶囊按钮消失为微信客户端的BUG
      2023-07-27
      回复
  • A🌈小韩
    A🌈小韩
    2023-07-13

    核心问题是因为一个子进程中,自定义导航栏的高度是已经加载好的,如果通过wx.getEnterOptionsSync()来获取apiCategory再修改,需要深入到对应的页面逐一处理。

    2023-07-13
    有用
    回复 1
    • A🌈小韩
      A🌈小韩
      2023-07-13回复大熊
      我想过通过使用这个 Path 进行一次 wx.reLaunch(),但是没用。
      1.这个 Path 不是标准 Path,缺少一个 `/`。
      2.使用这个 Path reLaunc 没用,组件竟然完全没更新,数据我看了没问题,有点奇怪。
      2023-07-13
      回复
登录 后发表内容