uni-nav-bar 默认边框需用 border="false" 关闭,其他写法无效;自定义导航栏黑线多因父容器背景色、box-shadow 或 ios 分隔线导致;pages.json 中 navigationstyle 与 titlenview 必须同时配置;下拉刷新时黑线需动态切换导航栏背景色。

uni-nav-bar 组件默认边框怎么关
黑线最常见来源就是 uni-nav-bar 自带的底部边框。它不是 bug,是组件默认行为,但文档里藏得有点深——border 是个布尔属性,必须写成 border="false"(注意是字符串 "false",不是布尔值 false),否则不生效。
常见错误写法:border=false、:border="false"、border={false},这些都不会关闭边框。
- 正确写法:
<uni-nav-bar border="false" title="标题"></uni-nav-bar> - 如果用在条件渲染里,也得保持字符串形式:
border="true"或border="false",别用 JS 表达式绑定 - 全局禁用?改源码太重,更推荐在每个使用处显式传
border="false",可控且无副作用
自定义导航栏时 background-color 透明但仍有黑线
设了 navigationStyle: "custom" + background-color: transparent,结果状态栏下方还是有细黑线,大概率是以下两个原因:
- 父容器或 body 有默认背景色,透出后形成“视觉黑线”,检查
page或根<view></view>的background-color,确保为纯白或与导航栏一致 - Android 真机上,
box-shadow在透明背景+硬件加速下可能渲染异常,哪怕 shadow 值极小也会显黑,务必加box-shadow: none - iOS 上部分机型(如 iOS 15+)会自动加一层浅灰分隔线,需用
::deep(.uni-nav-bar__content)穿透并清除border-bottom
pages.json 里配错 navigationStyle 导致黑线错位
很多人以为只要写了 navigationStyle: "custom" 就万事大吉,但漏掉了关键配套项:"titleNView": false。这两者必须同时存在,否则原生导航栏没真正关闭,custom 模式下层叠渲染,容易在状态栏和自定义栏之间挤出一条缝,看起来像黑线。
尤其注意:
- 这个配置要写在
pages.json对应页面的style节点下,不是 globalStyle - 不能只写
navigationStyle: "custom",否则 App 端可能 fallback 到半原生状态,黑线位置飘忽 - 微信小程序端即使配了
custom,也不会注入--status-bar-height,此时若强行用 padding-top 占位,反而可能拉出空白或错位黑线
下拉刷新时黑线突然出现
开启 enablePullDownRefresh: true 后,下拉瞬间导航栏变黑或出现黑线,本质是 webview 整体拖动导致透明区域内容顶入状态栏,Android 渲染顺序错乱。这不是样式能修好的问题。
解法只有一个:行为隔离。
- 给导航栏加动态 class:
:class="{ 'nav-transparent': !isPulling }" - 在
onPullDownRefresh里设isPulling = true,此时移除透明,用实色背景盖住状态栏区域 - 在
stopPullDownRefresh回调里设isPulling = false,恢复沉浸 - 别试图用
z-index或will-change强制重绘——原生层叠加逻辑不归 CSS 管
真机调试时最容易忽略的是:这个黑线只在下拉过程中闪现,截图抓不到,必须盯着操作过程看。











