導航欄內容的定制,需要識別當前頁面的性質,根據不同的頁面展示不同的內容,可以通過獲取當前的頁面路由棧來判定當前的頁面性質
step3 導航欄組件基本結構
目前快狗打車小程序的基本結構
// navBar.wxml <cover-view class='place-holder'></cover-view> <cover-view class='nav-bar'> <cover-view class='tool-bar' style='height: 20px'></cover-view> <cover-view class='title-bar'> <cover-view class='left-cell'> // scene0 常規首頁 個人中心按鈕 // scene1 非常規首頁 回首頁按鈕 // scene2 嵌套頁 返回上一頁按鈕 + 回首頁按鈕 </cover-view> <cover-view class='center-cell'> // scene0 常規首頁 個性化title // scene1 其他頁 正常title </cover-view> <cover-view class='right-cell'> // 占位用的 </cover-view> </cover-view> </cover-view>
Tips:
組件內多了一個占位的place-holder塊,是因為某些頁面有類似滾動列表的需求,要保證導航欄始終在視窗的頂部的話,需要使用定位,定位之后脫離文檔流,在最初的時候需要占位塊保證后續的頁面內容不會被導航欄遮擋
使用cover-view布局是因為快狗的業務中有類似map的原生組件,使用view的話有被遮擋的風險
step4 高度計算
需要計算title-bar的高度
在 默認導航欄 & 無底部tab欄 的情況下,使用wx.getSystemInfoSync獲取手機信息,可以看到兩項信息:
這種情況下,二者的差值就是默認的導航欄的高度, 但是在設置了"navigationStyle": "custom"之后,二者的值是一樣的了,因此導航欄的高度我們需要使用統計的經驗值。
根據統計,得到如下的結果:
{ 'iPhone': 64, 'iPhoneX': 88, 'Android': 68, 'samsung': 72 }
工具欄的高度可根據wx.getSystemInfoSync返回值中的statusBarHeight獲取。
至此,我們得到了導航欄的相關的高度值
// 導航欄總高度 & 占位塊高度 placeHoder = totalBar = { 'iPhone': 64, 'iPhoneX': 88, 'Android': 68, 'samsung': 72 } // 時間、信號等工具欄的高度 toolBar = systermInfo.statusBarHeight // 頁面title欄的高度 titleBar = totalBar - toolBar
step5 內容定制
在組件的生命周期函數attached中,我們可以獲取當前的頁面路由棧
let pages = getCurrentPages() let current_page = pages[pages.length - 1].route const NORMAL_ENTRY = '常規的入口頁路徑' // scene 0 常規入口頁 個性化title、個人中心 pages.length === 1 && current_page === NORMAL_ENTRY // scene 1 非常規入口頁 回首頁 pages.length === 1 && current_page !== NORMAL_ENTRY // scene 2 嵌套頁面 返回 + 回首頁 pages.length > 1
根據不同的條件,展示不同的內容
最終效果
scene 0 常規首頁
scene 1 非常規首頁
scene 2 嵌套頁
目前在生產環境99%的機型中,都可以完美的運行。
寫在最后
總結
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com