最近两天在修改一个项目中出现的bug,就是有一个搜索界面的SearchBar下做了一个搜索历史的列表展示,在不是带刘海屏的手机上显示一切ok,但遗憾的是在刘海屏上搜索列表就会被遮挡一部分,当然这个搜索历史View的位置是用frame直接写的,于是我就各种试,用自动布局写了些发现问题很大到最后都没发现问题为啥会出现,于是乎还是乖乖回归到用frame来写,那么唯一需要解决的就是解决这个View的y值,于是就探究了一下普通屏幕和刘海屏之间的区别。
首先我先通过获取状态栏的高度做对比,如下
UIApplication.shared.statusBarFrame.height
在普通设备获取到的值为20,但在刘海屏手机获取到的是44。通过这我貌似知道那个View为啥显示不正常了,原来将y写成固定值64 = 20 + 44(NavigationBar的高度)。现在发现需要根据不同情况也就是是不是刘海屏重新计算,并且动态计算。如下:
let statusBarHeight = UIApplication.shared.statusBarFrame.height
let barHeight:CGFloat = statusBarHeight > 20 ? statusBarHeight + (mSearchVC?.searchBar.frame.height ?? 0) : 64
let offsetY: CGFloat = isNeedHideNavi() ? barHeight : 0
其中isNeedHideNavi()是判断当前界面是否隐藏了navigationbar,否则不需要做高度
声明:这篇文章中所提只适合我这个功能,不一定适用于你,请自己鉴别。