前言
本人項目採用Objective-C進行開發,如果swift語言請自行參考,在後期適配過程中整理的相關經驗。首先我們來看一下蘋果相關屏幕尺寸
官方說明
在官網上有這麼兩張圖片:
在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上方高度。其他的適配與這個類似,只需要判斷好屏幕類型,將必要的高度加進去就能實現劉海屏幕的適配。如果對你有幫助,請給我個贊。