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 = false
    if UIDevice.current.userInterfaceIdiom == .phone {
        if #available(iOS 11.0, *) {
            isIphoneX = UIApplication.shared.windows[0].safeAreaInsets.bottom > 0
        } else {
            // Fallback on earlier versions
            isIphoneX = 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),这样不会被大圆角切掉内容,且页面整体上会美观一些。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值