<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Qwas]]></title><description><![CDATA[Qwas]]></description><link>https://dev.qwas.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 01:07:24 GMT</lastBuildDate><atom:link href="https://dev.qwas.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[完美微信小程序自定义导航栏]]></title><description><![CDATA[最近做了一个微信小程序，UI 设计出来一个界面，需要在首页将背景图全屏展示，一直以为顶部菜单是固定的，只能使用黑色或白色样式，当设计提出时，我还信誓旦旦的说，微信小程序功能不支持。。。
后来搜索了一下，这个东西叫自定义顶部导航栏，是我把文档看漏了
准备工作
在 index.json 下面内容
"navigationStyle": "custom",

这是隐藏后的效果，右边那个叫胶囊的按钮，是隐藏不了的。
高度分析
高度分为状态栏，胶囊的高度，以及胶囊上下的间隙
通过 wx.getSystemI...]]></description><link>https://dev.qwas.dev/slove-wechat-miniprogram-navigation-height</link><guid isPermaLink="true">https://dev.qwas.dev/slove-wechat-miniprogram-navigation-height</guid><category><![CDATA[WeChat]]></category><dc:creator><![CDATA[qwas]]></dc:creator><pubDate>Sun, 27 Nov 2022 11:50:52 GMT</pubDate><content:encoded><![CDATA[<p>最近做了一个微信小程序，UI 设计出来一个界面，需要在首页将背景图全屏展示，一直以为顶部菜单是固定的，只能使用黑色或白色样式，当设计提出时，我还信誓旦旦的说，微信小程序功能不支持。。。</p>
<p>后来搜索了一下，这个东西叫自定义顶部导航栏，是我把文档看漏了</p>
<h2 id="heading-5yeg5ash5bel5l2c">准备工作</h2>
<p>在 index.json 下面内容</p>
<pre><code class="lang-json"><span class="hljs-string">"navigationStyle"</span>: <span class="hljs-string">"custom"</span>,
</code></pre>
<p>这是隐藏后的效果，右边那个叫胶囊的按钮，是隐藏不了的。</p>
<h2 id="heading-6auy5bqm5yig5p6q">高度分析</h2>
<p>高度分为状态栏，胶囊的高度，以及胶囊上下的间隙</p>
<p>通过 <a target="_blank" href="https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfo.html"><code>wx.getSystemInfo({})</code></a> 方法可以获取状态栏高度</p>
<pre><code class="lang-javascript">wx.getSystemInfo({  <span class="hljs-comment">// 这个是同步方法</span>
  success(res) {
    statusBarHeight = res.statusBarHeight
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'状态栏的高度'</span>, statusBarHeight)
  }
})
</code></pre>
<p><a target="_blank" href="https://developers.weixin.qq.com/miniprogram/dev/api/ui/menu/wx.getMenuButtonBoundingClientRect.html"><code>wx.getMenuButtonBoundingClientRect()</code></a> 方法可以获取胶囊的高度，位置，即胶囊按钮距离顶部的距离</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> rect = wx.getMenuButtonBoundingClientRect()
<span class="hljs-keyword">const</span> { top, height, width } = rect
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'胶囊按钮距离顶部的距离'</span>, top)
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'胶囊按钮自身高度'</span>, height)
</code></pre>
<p><img src="https://res.qaws.dev/dev/slove-wechat-miniprogram-navigation-height/iphone-console-log.png" alt="console-log.png" class="image--center mx-auto" /></p>
<h2 id="heading-6k6h566x6auy5bqm">计算高度</h2>
<p>导航栏的高度 = 状态栏的高度 + 胶囊按钮与状态栏的上间距及下间距 + 胶囊按钮自身高度</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> padding = (statusBarHeight + (top - statusBarHeight) * <span class="hljs-number">2</span> + height)

<span class="hljs-built_in">this</span>.setData({
  <span class="hljs-attr">padding</span>: padding
})
</code></pre>
<h2 id="heading-55yf5py65pi56s65pwi5p6c">真机显示效果</h2>
<p>iPhone
<img src="https://res.qaws.dev/dev/slove-wechat-miniprogram-navigation-height/iphone-preview.png" alt="iphone-preview.png" class="image--center mx-auto" /></p>
<p>iPad
<img src="https://res.qaws.dev/dev/slove-wechat-miniprogram-navigation-height/ipad-preview.png" alt="ipad-preview.png" class="image--center mx-auto" /></p>
<p>Android
<img src="https://res.qaws.dev/dev/slove-wechat-miniprogram-navigation-height/android-preview.jpg" alt="android-preview.png" class="image--center mx-auto" /></p>
<p>Have Fun ~</p>
]]></content:encoded></item></channel></rss>