uniapp 计算安全区高度 和 刘海高度

JavaScript012

uniapp 计算安全区高度 和 刘海高度,第1张

bottom: calc(32rpx + env(safe-area-inset-bottom))

margin-top: calc(298rpx - var(--status-bar-height))

苹果刘海屏尺寸不能计算。根据查询相关公开信息得知:可以在官网查询。iphone13刘海尺寸:宽度从5.3mm上升到5.35mm,而长度则从34.83mm缩减到26.8mm,虽然高度略高,但由于听筒扬声器上移至正面玻璃边缘,刘海整体会显得更窄,直观看上去刘海要更小。

前文提到,DialogV3 库在有刘海屏的设备上出现了双重导航栏高度的问题,实际上这个问题是因为屏幕“危险区”导致的,于是就有了 不完美解决方案 这篇文章,里边的解决方法也只是做到了判断是否具有“刘海”,然后通过界面布局规避掉这部分区域,但实际上这样的处理方案并非完美,因为如果我们非得将界面显示到刘海区域这是做不到的。

正因此有了这篇文章,通过查询API文档,现在已经找到了合理的解决方案,可以让任意 Window 沉浸到刘海区域中,从而彻底解决这个问题。

通过查阅API文档后发现,在API-28(Android P)后Google在WindowManager.LayoutParams新增了一个API:

其大致用法和含义为:

其具有三个可选属性值,分别对应:

看注释大致上说明就是这个值管控了是否允许布局扩展到刘海部分,而其中 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 是允许的,但是用这个属性有个条件,即布局不能设置以下Flag:

那么,在Dialog启动后,对其Window的属性进行如下修改:

即可完成刘海部分沉浸式的适配工作。

实际运行效果完美满足需求。