成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

小程序自定義導(dǎo)航欄(適配所有手機(jī))

jayzou / 3451人閱讀

摘要:背景在做小程序時(shí),關(guān)于默認(rèn)導(dǎo)航欄,我們遇到了以下的問(wèn)題手機(jī)對(duì)于頁(yè)面的展示不一致,安卓的顯示不居中頁(yè)面的只支持純文本級(jí)別的樣式控制,不能夠做更豐富的效果左上角的事件無(wú)法監(jiān)聽(tīng)定制路由導(dǎo)航單一,只能夠返回上一頁(yè),深層級(jí)頁(yè)面的返回不夠友好探索小程序

背景

在做小程序時(shí),關(guān)于默認(rèn)導(dǎo)航欄,我們遇到了以下的問(wèn)題:

Android、IOS手機(jī)對(duì)于頁(yè)面title的展示不一致,安卓title的顯示不居中

頁(yè)面的title只支持純文本級(jí)別的樣式控制,不能夠做更豐富的title效果

左上角的事件無(wú)法監(jiān)聽(tīng)、定制

路由導(dǎo)航單一,只能夠返回上一頁(yè),深層級(jí)頁(yè)面的返回不夠友好

探索

小程序自定義導(dǎo)航欄已開(kāi)放許久>>了解一下,相信不少小伙伴已使用過(guò)這個(gè)功能,同時(shí)不少小伙伴也會(huì)發(fā)現(xiàn)一些坑:

機(jī)型多如牛毛:自定義導(dǎo)航欄高度在不同機(jī)型始終無(wú)法達(dá)到視覺(jué)上的統(tǒng)一

調(diào)皮的膠囊按鈕:導(dǎo)航欄元素(文字,圖標(biāo)等)怎么也對(duì)不齊那該死的膠囊按鈕

各種尺寸的全面屏,奇怪的劉海屏,簡(jiǎn)直要抓狂

一探究竟

為了搞明白原理,我先去翻了官方文檔,>>飛機(jī),點(diǎn)過(guò)去是不是很驚喜,很意外,通篇大文盡然只有最下方的一張圖片與這個(gè)問(wèn)題有關(guān),并且啥也看不清,汗汗汗...

我特意找了一張圖片來(lái)

分析上圖,我得到如下信息:

Android跟iOS有差異,表現(xiàn)在頂部到膠囊按鈕之間的距離差了6pt

膠囊按鈕高度為32pt, iOS和Android一致

動(dòng)手分析

我們寫(xiě)一個(gè)狀態(tài)欄,通過(guò)wx.getSystemInfoSync().statusBarHeight設(shè)置高度

Android:

iOS:

可以看出,iOS膠囊按鈕與狀態(tài)欄之間距離為:4px, Android為8px,是不是所有手機(jī)都是這種情況呢?
答案是:蘋(píng)果手機(jī)確實(shí)都是4px,安卓大部分都是7和8 也會(huì)有其他的情況(可以自己打印getSystemInfo驗(yàn)證)如何快速便捷算出這個(gè)高度,請(qǐng)接著往下看
如何計(jì)算

導(dǎo)航欄分為狀態(tài)欄和標(biāo)題欄,只要能算出每臺(tái)手機(jī)的導(dǎo)航欄高度問(wèn)題就迎刃而解

導(dǎo)航欄高度 = 膠囊按鈕高度 + 狀態(tài)欄到膠囊按鈕間距 * 2 + 狀態(tài)欄高度

注:由于膠囊按鈕是原生組件,為表現(xiàn)一致,其單位在各種手機(jī)中都為px,所以我們自定義導(dǎo)航欄的單位都必需是px(切記不能用rpx),才能完美適配。
解決問(wèn)題

現(xiàn)在我們明白了原理,可以利用膠囊按鈕的位置信息和statusBarHeight高度動(dòng)態(tài)計(jì)算導(dǎo)航欄的高度,貼一個(gè)實(shí)現(xiàn)此功能最重要的方法

let systemInfo = wx.getSystemInfoSync();
let rect = Taro.getMenuButtonBoundingClientRect ? Taro.getMenuButtonBoundingClientRect() : null; //膠囊按鈕位置信息
    Taro.getMenuButtonBoundingClientRect();
    let navBarHeight = (function() { //導(dǎo)航欄高度
            let gap = rect.top - systemInfo.statusBarHeight; //動(dòng)態(tài)計(jì)算每臺(tái)手機(jī)狀態(tài)欄到膠囊按鈕間距
            return 2 * gap + rect.height;
          })();

gap信息就是不同的手機(jī)其狀態(tài)欄到膠囊按鈕間距,具體更多代碼實(shí)現(xiàn)和使用demo請(qǐng)移步下方代碼倉(cāng)庫(kù),代碼中還會(huì)有輸入框文字跳動(dòng)解決辦法,安卓手機(jī)輸入框文字飛出解決辦法,左側(cè)按鈕邊框太粗解決辦法等等

吐槽

這么重要的問(wèn)題,官方盡然沒(méi)有提供解決方案...竟然提供了一張看不清的圖片???

網(wǎng)上有很多ios設(shè)置44,android設(shè)置48,還有根據(jù)不同的手機(jī)型號(hào)設(shè)置不同高度,通過(guò)長(zhǎng)時(shí)間的開(kāi)發(fā)和嘗試,本人發(fā)現(xiàn)以上方案并不完美,并且bug很多
代碼庫(kù)

Taro組件gitHub地址詳細(xì)用法請(qǐng)參考README

原生組件npm構(gòu)建版本gitHub地址詳細(xì)用法請(qǐng)參考README

原生組件簡(jiǎn)易版gitHub地址詳細(xì)用法請(qǐng)參考README

由于本人精力有限,目前只計(jì)劃發(fā)布維護(hù)好這2種組件,其他組件請(qǐng)自行修改代碼,有問(wèn)題請(qǐng)聯(lián)系

備注

上方2種組件在最下方30多款手機(jī)測(cè)試情況表現(xiàn)良好

iPhone手機(jī)打電話(huà)和開(kāi)熱點(diǎn)導(dǎo)致導(dǎo)航欄樣式錯(cuò)亂,問(wèn)題已經(jīng)解決啦,請(qǐng)去demo里測(cè)試,這里特別感謝moments網(wǎng)友提出的問(wèn)題

本文章并無(wú)任何商業(yè)性質(zhì),如有侵權(quán)請(qǐng)聯(lián)系本人修改或刪除

文章少量部分內(nèi)容是本人查詢(xún)搜集而來(lái)

如有問(wèn)題可以下方留言討論,微信zhijunxh

比較

斗魚(yú):

虎牙:

微博:

酷狗:

知乎:

知乎是這里邊做的最好的,但是我個(gè)人認(rèn)為有幾個(gè)可以?xún)?yōu)化的小問(wèn)題

打電話(huà)或者開(kāi)啟熱點(diǎn)導(dǎo)致樣式錯(cuò)落,這也是大部門(mén)小程序的問(wèn)題

導(dǎo)航欄下邊距太小,看起來(lái)不舒服

搜索框距離2側(cè)按鈕組距離不對(duì)等

自定義返回和home按鈕中的豎線(xiàn)顏色重了,并且感覺(jué)太粗

如果您看到了此篇文章,請(qǐng)趕快修改自己的代碼,并運(yùn)用在實(shí)踐中吧

掃碼體驗(yàn)我的小程序:

創(chuàng)作不易,如果對(duì)你有幫助,請(qǐng)移步Taro組件gitHub原生組件gitHub給個(gè)星星 star?? 謝謝
測(cè)試信息
手機(jī)型號(hào) 膠囊位置信息 statusBarHeight 測(cè)試情況
iPhoneX 80 32 281 369 48 88 44 通過(guò)
iPhone8 plus 56 32 320 408 24 88 20 通過(guò)
iphone7 56 32 281 368 24 87 20 通過(guò)
iPhone6 plus 56 32 320 408 24 88 20 通過(guò)
iPhone6 56 32 281 368 24 87 20 通過(guò)
HUAWEI SLA-AL00 64 32 254 350 32 96 24 通過(guò)
HUAWEI VTR-AL00 64 32 254 350 32 96 24 通過(guò)
HUAWEI EVA-AL00 64 32 254 350 32 96 24 通過(guò)
HUAWEI EML-AL00 68 32 254 350 36 96 29 通過(guò)
HUAWEI VOG-AL00 65 32 254 350 33 96 25 通過(guò)
HUAWEI ATU-TL10 64 32 254 350 32 96 24 通過(guò)
HUAWEI SMARTISAN OS105 64 32 326 422 32 96 24 通過(guò)
XIAOMI MI6 59 28 265 352 31 87 23 通過(guò)
XIAOMI MI4LTE 60 32 254 350 28 96 20 通過(guò)
XIAOMI MIX3 74 32 287 383 42 96 35 通過(guò)
REDMI NOTE3 64 32 254 350 32 96 24 通過(guò)
REDMI NOTE4 64 32 254 350 32 96 24 通過(guò)
REDMI NOTE3 55 28 255 351 27 96 20 通過(guò)
REDMI 5plus 67 32 287 383 35 96 28 通過(guò)
MEIZU M571C 65 32 254 350 33 96 25 通過(guò)
MEIZU M6 NOTE 62 32 254 350 30 96 22 通過(guò)
MEIZU MX4 PRO 62 32 278 374 30 96 22 通過(guò)
OPPO A33 65 32 254 350 33 96 26 通過(guò)
OPPO R11 58 32 254 350 26 96 18 通過(guò)
VIVO Y55 64 32 254 350 32 96 24 通過(guò)
HONOR BLN-AL20 64 32 254 350 32 96 24 通過(guò)
HONOR NEM-AL10 59 28 265 352 31 87 24 通過(guò)
HONOR BND-AL10 64 32 254 350 32 96 24 通過(guò)
HONOR duk-al20 64 32 254 350 32 96 24 通過(guò)
SAMSUNG SM-G9550 64 32 305 401 32 96 24 通過(guò)
360 1801-A01 64 32 254 350 32 96 24 通過(guò)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/116285.html

相關(guān)文章

  • 程序定義導(dǎo)航適配所有手機(jī)

    摘要:背景在做小程序時(shí),關(guān)于默認(rèn)導(dǎo)航欄,我們遇到了以下的問(wèn)題手機(jī)對(duì)于頁(yè)面的展示不一致,安卓的顯示不居中頁(yè)面的只支持純文本級(jí)別的樣式控制,不能夠做更豐富的效果左上角的事件無(wú)法監(jiān)聽(tīng)定制路由導(dǎo)航單一,只能夠返回上一頁(yè),深層級(jí)頁(yè)面的返回不夠友好探索小程序 背景 在做小程序時(shí),關(guān)于默認(rèn)導(dǎo)航欄,我們遇到了以下的問(wèn)題: Android、IOS手機(jī)對(duì)于頁(yè)面title的展示不一致,安卓title的顯示不居中...

    Yu_Huang 評(píng)論0 收藏0
  • Win10應(yīng)用設(shè)計(jì)的那些事兒

    摘要:如何挑選合適的導(dǎo)航結(jié)構(gòu)導(dǎo)航設(shè)計(jì)是應(yīng)用設(shè)計(jì)的關(guān)鍵,設(shè)計(jì)規(guī)范以下簡(jiǎn)稱(chēng)規(guī)范中將導(dǎo)航元素分為對(duì)等層次和歷史導(dǎo)航等幾類(lèi),例如表和透視表導(dǎo)航窗格是對(duì)等導(dǎo)航元素,中心大綱細(xì)節(jié)屬于分層導(dǎo)航元素,返回則屬于歷史導(dǎo)航元素。 此文已由作者楊凱明授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪(fǎng)問(wèn)網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。 繼Windows 10系統(tǒng)發(fā)布之后,很多Windows用戶(hù)更新了系統(tǒng)。win10系統(tǒng)的發(fā)布,...

    ad6623 評(píng)論0 收藏0
  • 移動(dòng)前端 - 收藏集 - 掘金

    摘要:使用移動(dòng)設(shè)備查看頁(yè)面時(shí)會(huì)發(fā)現(xiàn),在微信瀏覽器中有頂部導(dǎo)航欄有效解決圖片使用單位邊角缺失的問(wèn)題前端掘金起因在移動(dòng)端使用布局時(shí)圖片也需要用單位。移動(dòng)端實(shí)踐前端掘金說(shuō)起,相信大家并不陌生。 Sticky Footer,完美的絕對(duì)底部 - 前端 - 掘金寫(xiě)在前面 做過(guò)網(wǎng)頁(yè)開(kāi)發(fā)的同學(xué)想必都遇到過(guò)這樣尷尬的排版問(wèn)題:在主體內(nèi)容不足夠多或者未完全加載出來(lái)之前,就會(huì)導(dǎo)致出現(xiàn)(圖一)的這種情況,原因是因?yàn)?..

    Jochen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<