IOS關於劉海屏適配問題解決辦法

前言

本人項目採用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上方高度。其他的適配與這個類似,只需要判斷好屏幕類型,將必要的高度加進去就能實現劉海屏幕的適配。如果對你有幫助,請給我個贊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章