摘要:背景在做小程序時,關于默認導航欄,我們遇到了以下的問題手機對于頁面的展示不一致,安卓的顯示不居中頁面的只支持純文本級別的樣式控制,不能夠做更豐富的效果左上角的事件無法監(jiān)聽定制路由導航單一,只能夠返回上一頁,深層級頁面的返回不夠友好探索小程序
背景
在做小程序時,關于默認導航欄,我們遇到了以下的問題:
Android、IOS手機對于頁面title的展示不一致,安卓title的顯示不居中
頁面的title只支持純文本級別的樣式控制,不能夠做更豐富的title效果
左上角的事件無法監(jiān)聽、定制
路由導航單一,只能夠返回上一頁,深層級頁面的返回不夠友好
探索小程序自定義導航欄已開放許久>>了解一下,相信不少小伙伴已使用過這個功能,同時不少小伙伴也會發(fā)現一些坑:
機型多如牛毛:自定義導航欄高度在不同機型始終無法達到視覺上的統(tǒng)一
調皮的膠囊按鈕:導航欄元素(文字,圖標等)怎么也對不齊那該死的膠囊按鈕
各種尺寸的全面屏,奇怪的劉海屏,簡直要抓狂
一探究竟為了搞明白原理,我先去翻了官方文檔,>>飛機,點過去是不是很驚喜,很意外,通篇大文盡然只有最下方的一張圖片與這個問題有關,并且啥也看不清,汗汗汗...
我特意找了一張圖片來
分析上圖,我得到如下信息:
Android跟iOS有差異,表現在頂部到膠囊按鈕之間的距離差了6pt
膠囊按鈕高度為32pt, iOS和Android一致
動手分析我們寫一個狀態(tài)欄,通過wx.getSystemInfoSync().statusBarHeight設置高度
Android:
iOS:
可以看出,iOS膠囊按鈕與狀態(tài)欄之間距離為:4px, Android為8px,是不是所有手機都是這種情況呢?如何計算
答案是:蘋果手機確實都是4px,安卓大部分都是7和8 也會有其他的情況(可以自己打印getSystemInfo驗證)如何快速便捷算出這個高度,請接著往下看
導航欄分為狀態(tài)欄和標題欄,只要能算出每臺手機的導航欄高度問題就迎刃而解
導航欄高度 = 膠囊按鈕高度 + 狀態(tài)欄到膠囊按鈕間距 * 2 + 狀態(tài)欄高度
注:由于膠囊按鈕是原生組件,為表現一致,其單位在各種手機中都為px,所以我們自定義導航欄的單位都必需是px(切記不能用rpx),才能完美適配。解決問題
現在我們明白了原理,可以利用膠囊按鈕的位置信息和statusBarHeight高度動態(tài)計算導航欄的高度,貼一個實現此功能最重要的方法
let systemInfo = wx.getSystemInfoSync(); let rect = Taro.getMenuButtonBoundingClientRect ? Taro.getMenuButtonBoundingClientRect() : null; //膠囊按鈕位置信息 Taro.getMenuButtonBoundingClientRect(); let navBarHeight = (function() { //導航欄高度 let gap = rect.top - systemInfo.statusBarHeight; //動態(tài)計算每臺手機狀態(tài)欄到膠囊按鈕間距 return 2 * gap + rect.height; })();
gap信息就是不同的手機其狀態(tài)欄到膠囊按鈕間距,具體更多代碼實現和使用demo請移步下方代碼倉庫,代碼中還會有輸入框文字跳動解決辦法,安卓手機輸入框文字飛出解決辦法,左側按鈕邊框太粗解決辦法等等
吐槽這么重要的問題,官方盡然沒有提供解決方案...竟然提供了一張看不清的圖片???
網上有很多ios設置44,android設置48,還有根據不同的手機型號設置不同高度,通過長時間的開發(fā)和嘗試,本人發(fā)現以上方案并不完美,并且bug很多代碼庫
Taro組件gitHub地址詳細用法請參考README
原生組件npm構建版本gitHub地址詳細用法請參考README
原生組件簡易版gitHub地址詳細用法請參考README
由于本人精力有限,目前只計劃發(fā)布維護好這2種組件,其他組件請自行修改代碼,有問題請聯系
備注上方2種組件在最下方30多款手機測試情況表現良好
iPhone手機打電話和開熱點導致導航欄樣式錯亂,問題已經解決啦,請去demo里測試,這里特別感謝moments網友提出的問題
本文章并無任何商業(yè)性質,如有侵權請聯系本人修改或刪除
文章少量部分內容是本人查詢搜集而來
如有問題可以下方留言討論,微信zhijunxh
比較斗魚:
虎牙:
微博:
酷狗:
知乎:
知乎是這里邊做的最好的,但是我個人認為有幾個可以優(yōu)化的小問題
打電話或者開啟熱點導致樣式錯落,這也是大部門小程序的問題
導航欄下邊距太小,看起來不舒服
搜索框距離2側按鈕組距離不對等
自定義返回和home按鈕中的豎線顏色重了,并且感覺太粗
如果您看到了此篇文章,請趕快修改自己的代碼,并運用在實踐中吧
掃碼體驗我的小程序:
創(chuàng)作不易,如果對你有幫助,請移步Taro組件gitHub原生組件gitHub給個星星 star?? 謝謝測試信息
手機型號 | 膠囊位置信息 | statusBarHeight | 測試情況 |
---|---|---|---|
iPhoneX | 80 32 281 369 48 88 | 44 | 通過 |
iPhone8 plus | 56 32 320 408 24 88 | 20 | 通過 |
iphone7 | 56 32 281 368 24 87 | 20 | 通過 |
iPhone6 plus | 56 32 320 408 24 88 | 20 | 通過 |
iPhone6 | 56 32 281 368 24 87 | 20 | 通過 |
HUAWEI SLA-AL00 | 64 32 254 350 32 96 | 24 | 通過 |
HUAWEI VTR-AL00 | 64 32 254 350 32 96 | 24 | 通過 |
HUAWEI EVA-AL00 | 64 32 254 350 32 96 | 24 | 通過 |
HUAWEI EML-AL00 | 68 32 254 350 36 96 | 29 | 通過 |
HUAWEI VOG-AL00 | 65 32 254 350 33 96 | 25 | 通過 |
HUAWEI ATU-TL10 | 64 32 254 350 32 96 | 24 | 通過 |
HUAWEI SMARTISAN OS105 | 64 32 326 422 32 96 | 24 | 通過 |
XIAOMI MI6 | 59 28 265 352 31 87 | 23 | 通過 |
XIAOMI MI4LTE | 60 32 254 350 28 96 | 20 | 通過 |
XIAOMI MIX3 | 74 32 287 383 42 96 | 35 | 通過 |
REDMI NOTE3 | 64 32 254 350 32 96 | 24 | 通過 |
REDMI NOTE4 | 64 32 254 350 32 96 | 24 | 通過 |
REDMI NOTE3 | 55 28 255 351 27 96 | 20 | 通過 |
REDMI 5plus | 67 32 287 383 35 96 | 28 | 通過 |
MEIZU M571C | 65 32 254 350 33 96 | 25 | 通過 |
MEIZU M6 NOTE | 62 32 254 350 30 96 | 22 | 通過 |
MEIZU MX4 PRO | 62 32 278 374 30 96 | 22 | 通過 |
OPPO A33 | 65 32 254 350 33 96 | 26 | 通過 |
OPPO R11 | 58 32 254 350 26 96 | 18 | 通過 |
VIVO Y55 | 64 32 254 350 32 96 | 24 | 通過 |
HONOR BLN-AL20 | 64 32 254 350 32 96 | 24 | 通過 |
HONOR NEM-AL10 | 59 28 265 352 31 87 | 24 | 通過 |
HONOR BND-AL10 | 64 32 254 350 32 96 | 24 | 通過 |
HONOR duk-al20 | 64 32 254 350 32 96 | 24 | 通過 |
SAMSUNG SM-G9550 | 64 32 305 401 32 96 | 24 | 通過 |
360 1801-A01 | 64 32 254 350 32 96 | 24 | 通過 |
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/116285.html
摘要:背景在做小程序時,關于默認導航欄,我們遇到了以下的問題手機對于頁面的展示不一致,安卓的顯示不居中頁面的只支持純文本級別的樣式控制,不能夠做更豐富的效果左上角的事件無法監(jiān)聽定制路由導航單一,只能夠返回上一頁,深層級頁面的返回不夠友好探索小程序 背景 在做小程序時,關于默認導航欄,我們遇到了以下的問題: Android、IOS手機對于頁面title的展示不一致,安卓title的顯示不居中...
摘要:如何挑選合適的導航結構導航設計是應用設計的關鍵,設計規(guī)范以下簡稱規(guī)范中將導航元素分為對等層次和歷史導航等幾類,例如表和透視表導航窗格是對等導航元素,中心大綱細節(jié)屬于分層導航元素,返回則屬于歷史導航元素。 此文已由作者楊凱明授權網易云社區(qū)發(fā)布。 歡迎訪問網易云社區(qū),了解更多網易技術產品運營經驗。 繼Windows 10系統(tǒng)發(fā)布之后,很多Windows用戶更新了系統(tǒng)。win10系統(tǒng)的發(fā)布,...
摘要:使用移動設備查看頁面時會發(fā)現,在微信瀏覽器中有頂部導航欄有效解決圖片使用單位邊角缺失的問題前端掘金起因在移動端使用布局時圖片也需要用單位。移動端實踐前端掘金說起,相信大家并不陌生。 Sticky Footer,完美的絕對底部 - 前端 - 掘金寫在前面 做過網頁開發(fā)的同學想必都遇到過這樣尷尬的排版問題:在主體內容不足夠多或者未完全加載出來之前,就會導致出現(圖一)的這種情況,原因是因為...
閱讀 1936·2021-11-24 09:39
閱讀 3518·2021-09-28 09:36
閱讀 3290·2021-09-06 15:10
閱讀 3444·2019-08-30 15:44
閱讀 1159·2019-08-30 15:43
閱讀 1802·2019-08-30 14:20
閱讀 2717·2019-08-30 12:51
閱讀 2035·2019-08-30 11:04