IOS关于刘海屏适配问题解决办法

前言

本人项目采用Objective-C进行开发,如果swift语言请自行参考,在后期适配过程中整理的相关经验。首先我们来看一下苹果相关屏幕尺寸

官方说明

在官网上有这么两张图片:

IOS关于刘海屏适配问题解决办法_第1张图片

在iOS11 之后有这么一个概念safeArea(安全区域,具体safeArea是怎么一回事自行google),这里主要探讨一下safeArea相关的两个概念,safeAreaLayoutGuide和safeAreaInsets。 从图中我们可以看出刘海屏幕多出了区域,这也就是我们再开发过程中需要怎么适配。在开发过程中本人采用的是纯代码开发。目前的解决办法是新建.pch文件,创建以下宏。

// 屏幕相关项设置
//屏幕rect
#define SCREEN_BOUNDS ([UIScreen mainScreen].bounds)
//屏幕宽度
#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
//屏幕高度
#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
//屏幕分辨率
#define SCREEN_RESOLUTION (SCREEN_WIDTH * SCREEN_HEIGHT * ([UIScreen mainScreen].scale))
//iPhone X系列判断
#define  IS_iPhoneX (CGSizeEqualToSize(CGSizeMake(375.f, 812.f), [UIScreen mainScreen].bounds.size) || CGSizeEqualToSize(CGSizeMake(812.f, 375.f), [UIScreen mainScreen].bounds.size)  || CGSizeEqualToSize(CGSizeMake(414.f, 896.f), [UIScreen mainScreen].bounds.size) || CGSizeEqualToSize(CGSizeMake(896.f, 414.f), [UIScreen mainScreen].bounds.size))
//状态栏高度
#define StatusBarHeight (IS_iPhoneX ? 44.f : 20.f)
//导航栏高度
#define NavBarHeight (44.f+StatusBarHeight)
//底部标签栏高度
#define TabBarHeight (IS_iPhoneX ? (49.f+34.f) : 49.f)
//安全区域高度
#define TabbarSafeBottomMargin (IS_iPhoneX ? 34.f : 0.f)
复制代码
具体实现,在需要适配的布局中这样定义 以下以一个UITableView为例

UITableView *tableService = [[UITableView alloc] initWithFrame:CGRectMake(0, NavBarHeight+10+30+10, kWidth, kHeight-TabBarHeight-30-10-10-10) style:UITableViewStylePlain];
    tableService.delegate = self;
    tableService.dataSource = self;
[self.view addSubview:tableService];

代码解析

  • CGRectMake x 0 屏幕X轴开始 y NavBarHeight+10+30+10 y轴需要从顶部判断出手机型号,直接使用NavBarHeight(宏定义中已经判断好相关比例)因为我的项目列表上方有50高的布局,所以加了10-30-10

  • k kWidth 宏定义中屏幕宽度 h kHeight 宏定义中屏幕宽度 需要因为我的项目列表上方有50高的布局,所以减去10-30-10上方高度。其他的适配与这个类似,只需要判断好屏幕类型,将必要的高度加进去就能实现刘海屏幕的适配。如果对你有帮助,请给我个赞。

你可能感兴趣的:(个人技术博客)