geeeger / blog

https://loofp.com
1 stars 0 forks source link

实际业务中,遇到适配Notch屏幕的棘手问题 #22

Open geeeger opened 4 years ago

geeeger commented 4 years ago

前述:公司app的webview有全屏模式,此时app导航栏是盖在webview上的。在上一篇记录中,我们记录了如何获知iphone是缺口屏(有底条的都带缺口)。本文针对公司app进行无奈的魔法数字兼容。

点击标题查看剩余内容

geeeger commented 4 years ago

已知iphone在没有强制设置html的dpr为1时,可以通过window.screen获取到逻辑像素值,这很有用!

// 如何获知我们在app内是否在全屏状态
// 已知我司设计稿导航通栏高度为44pt,不管是 ip11 ip678x,都是这个值
// 经过找ios客户端开发人员帮助,获知客户端当屏幕存在notch时,会将程序整体加一个44pt的边距
// 此时确定ios端app魔法数字为44
// 判断是否为全屏, 通过对比可视高度是否在 屏幕高度-44 到屏幕高度这个区间
const isIOSFullscreenMode = document.documentElement.clientHeight >= document.screen.height - 44

已知安卓有各种类型的Notch, 挖孔。。。刘海,侧边等等。。。,刘海高度并不统一。。

// 已知安卓设计稿通栏也为44pt, 已知状态栏高度大概在18-32pt
// 在通过手机开发模式下模拟超长缺口状态下,上面的魔法数字已经无法使用。
// 经过测试,可覆盖大部分机型的高度差为50-60pt,如何尽量提升覆盖,只能增多机型进行测试,然后归纳经验数字作为魔法数字。
// 设计稿为375pt
const aspect = window.screen.width / 375
const delta = aspect * 60
const isAndroidFullscreenMode = document.documentElement.clientHeight >= window.screen.height - delta

尽力了,不行只能拉倒。