微信小程序适配iphonex iphone11底部tabbar

微信小程序适配iphonex iphone11底部tabbar,第1张

需求:由于iphonex及之后的机型底部有一根横线,导致tabbar比原来提升了一段高度。根据底部tabbar提升的高度,计算出页面需要在底部给整个tabbar留出的位置高度。

PS:微睁宴弯信开发者悉闷工具iphonex与实际真机测试效果不同,底部并没有底部提升。

app.js调用 wx.getSystemInfo接祥雹口获取页面信息,判断底部提升高度。

官网文档:获取系统信息

如图所示

从苹果手机的iphoneX及以后,手机的屏幕顶部就出现了“齐刘海”和底部小黑横条的样式。不少app直接兼容了里面的webview的样式,屏幕在竖屏下顶部往往是导航栏,不会遮住webview里面的内容,而底部则从app层面设置了底部高度,使webview底部不在黑色横条区域内,这样就不会阻碍展示webview里面的内容。

但是,每个app千差万别,里面的webview也就展现不一,如果没有app底部高度,那么webview里面的底部内容就会被小黑条遮挡。从网页样式兼容性来说,需要兼容iphoneX后特有的“齐刘海”和底部小黑横条样式,又不影响以前机型的样式。

首先了解一下iphoneX的安全区域,下图蓝色部分为安全区域,而两边的margin、顶部齐刘海和底部小黑条区域都属于不安全区域,属于内容有可能会被遮挡的区域,那么我们需要控制我们的内容在安全区域内。

所幸,在iphoneX出来的时候,官方的ios11系统也提供了WebKit Api去兼容这种样式差异。

viewport-fit有auto,contain,罩毁fit三个属性值,默认是auto。

contain: 可视窗口完全包含网页内容, 页面内容显示在safe area内

cover:网页内容完全覆盖可视窗口,页面内容充满屏幕

auto:默认值,跟 contain 表现一致

默认情况下,safari展示的是viewport-fit=contain的情况,如下图,在横屏下,webview里的页面内容在安全区域内,但是从样式上看,这不太美观,并且没有利用好iphoneX赋予的全屏特性。

设置 viewport-fit=cover 后,如下图,内容全屏展示,但是左边的内容被“齐刘海”挡住了。

为了解决这个问题,ios11中的WebKit包括了一个新的CSS函数env(),以及四个预定义的环境变量 safe-area-inset-left 、 safe-area-inset-right 、 safe-area-inset-top 和 safe-area-inset-bottom 。这四个环境变量代表了距离安全区域的距离。

这样,当出现不在安春悉全区域时,env(safe-area-inset-left)不等于0,那么就会导致在padding-left上设置了一个安全距离,从而使内容不被遮挡。

上面是被“齐刘海”挡住的情况,实际比较多的情况用在底部小黑条挡住悬浮bar的情况,加上属性支持判断 @supports ,只有 env(safe-area-inset-bottom) 被浏览器支持的时候才会执行里面的css。

注:微信内的webview是默扒闷乎认viewport-fit=cover的状态的,只需要设置安全距离即可,微信小程序同样适用上述方案。

iphonex以上手机非矩形界面适配前:

适配后,iphonex以上手机非矩形界面自动适配底部高度:

手机在更新换代,随着手机样式发生改变,样式兼容问题也接踵而至,但是问题的制造者往往也是问题的解决者,开发者也不用焦虑找不到解决方案,从而使我们更专注业务逻辑本身。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12368300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存