帖子

为什么要用原生导航栏而不是自定义导航

YouRanSNS 主打 DIY 化,可能大家很疑惑,为什么顶部的导航栏与尾部的主导航确不能 DIY 化,甚至没有很多的配置,实际上这是源于顶部的导航栏与尾部的主导航是用的 uniapp 原生导航,本身 uniapp 又没有给这两个导航太多的配置选项。

可以自定义吗?

可以的,通过技术,是可以把顶部的导航与尾部的导航自定义,为什么我们没有这样做?

其实还是效率问题,uniapp 原生的顶部导航与尾部导航是原生渲染,在 App 端也是原生渲染,而自定义的,虽然样式、功能可扩展,但是执行效率上是不如原生导航的,所以这里,我们并没有进行封装自定义。

以下是引用 uniapp 官方的话:

取消原生导航栏后,自己使用HTML自定义组件模拟导航栏,会有很多性能体验问题:

加载不如原生导航快

下拉刷新无法从自定义的导航栏组件下面下拉。除非使用前端做下拉刷新,但性能不如自带的原生下拉刷新。

必须取消页面的bounce效果,否则滚动到顶时再拖屏幕,在iOS上发现title也被拖下来了。

滚动条会通顶

所以除非不得以,不要取消原生导航栏。

如必须使用,注意如下几点:

涉及到导航栏高度的css尽量放置在App.vue里面以提高渲染速度(css渲染顺序:先渲染App.vue里面的css,再渲染页面css)

如果是深色造成闪屏,需要在pages.json的titleNView下配置webview的背景色

状态栏颜色应设置默认颜色,若非必要,不建议修改其颜色

减少在组件中使用 :style="" 的使用以提高性能

下拉刷新使用circle方式,并设置offset,让下拉刷新的圈从指定位置开始下拉,具体见pages.json配置文档

有个高频场景是App“首页”的title自定义,如果实现的效果很个性化,那么使用plus.nativeObj.view的方案会过于复杂,由于首页并不存在新页面进入立即渲染的压力,所以App首页如果要大幅定制,推荐使用前端view绘制,而不是使用plus.nativeObj.view。

如果把自定义导航封装成组件,虽然多个页面引入方便,但性能下降,因为这种自定义组件的加载是晚于页面基本元素的,会导致新页面进入动画时无法渲染title。

所以导航条这种要求在动画期渲染的东西,尽量不要使用自定义组件方式。

https://www.0313.co/post/oioF4CuM

未登录无法操作

评论 2

上滑加载更多