iOS刘海屏适配,导航栏高度,工具栏高度,滚动范围

更新时间:2022-03-16

 

之前的判断方式太差了,最近更新一下,感谢关注

当前iPhone有两种主要屏幕有2种类型:刘海屏、方屏(SE、Plus、7、8)配新iPhone,且SE一直在更新,那么两种屏幕样式一段时间内会共存。所以每个页面都应该考虑做好适配

先看下各个尺寸

各版本iPhone的尺寸及分辨率

后面13的版本中这里就不补充了,基本可以发现,高度和宽度都没什么规律,我们需要使用系统提供的函数来判断了


具体代码如下

OC

+ (BOOL)isIPhoneXSeries {static BOOL isIphoneX = NO;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{if (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPhone) {isIphoneX = NO;}else if (@available(iOS 11.0, *)) {UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];if (mainWindow.safeAreaInsets.bottom > 0.0) {isIphoneX = YES;}}});return isIphoneX;
}

swift

func isIphoneXS() -> Bool {var isIphoneX = falseif UIDevice.current.userInterfaceIdiom == .phone {if #available(iOS 11.0, *) {isIphoneX = UIApplication.shared.windows[0].safeAreaInsets.bottom > 0} else {// Fallback on earlier versionsisIphoneX = false}}return isIphoneX;
}
 // 状态栏高度
#define AdaptNaviHeight      (iPhoneX ? 24 : 0)// 导航
#define NAVIHEIGHT           (iPhoneX ? 88 : 64) // Tab bar 圆角部分高度
#define AdaptTabHeight       (iPhoneX ? 34 : 0) // Tab bar
#define TABBARHEIGHT         (iPhoneX ? 83 : 49) 

总结

大多数情况,如果你使用的是原生的导航,大概率不怎么关心是否有刘海。但是如果,使用了自定义导航,就必须自己来做适配了。

1、关于每个控制器的适配,我采用了继承的方式,所以导航栏的高度我在基控制器就做了控制,子控制器直接取自定义的导航,就可以做页面适配了。

2、关于自定义导航上的控件,每个按钮和标题都以导航的底部为参考,这样导航高度变了,也不会导致导航上控件的位置错误。底部工具栏也一样的道理,以工具栏顶部为参考。

3、iOS11之后,present出来的非全屏的页面,导航高度54为最佳,64和88都太高了,所以这里也要单独判断一手(直接判断弹出方式)

4、在刘海屏手机上,有个普遍的特点,四个大圆角。常规页面滚动范围,一般顶部我们都有导航或者标题,问题不大,但是底部可能没有工具栏,建议预留一定的偏移(AdaptTabHeight),这样不会被大圆角切掉内容,且页面整体上会美观一些。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部