每次遇到適配的問題都去百度,很浪費(fèi)時間迅耘,所以這里整理下自己的使用以及搜索到的數(shù)據(jù),以供下一次自己查看监署。
適配的屏幕相關(guān)數(shù)據(jù)(非原創(chuàng)颤专,道友分享文章的截圖,文章會列舉在下方)
nav
tab
代碼中目前我使用的與適配相關(guān)的宏
#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
//狀態(tài)欄的高度
#define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height
//導(dǎo)航欄title的高度
#define kNavBarHeight 44.0
//tabBar的高度
#define kTabBarHeight ( Device_Is_iPhoneX_Devices ? 83 : 49)
//狀態(tài)欄+導(dǎo)航欄的高度
#define kTopBarHeight (kStatusBarHeight + kNavBarHeight)
//判斷是否是X系列(很多方法钠乏,下面還有無夜之星辰分享的判斷方法栖秕,使用狀態(tài)欄高度進(jìn)行判斷)
#define Device_Is_iPhoneX_Devices \
({BOOL isPhoneX = NO;\
if (@available(iOS 11.0, *)) {\
isPhoneX = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0;\
}\
(isPhoneX);})
//非X系列沒特殊情形時狀態(tài)欄的高度
#define SYS_STATUSBAR_HEIGHT 20
//熱點欄高度
#define HOTSPOT_STATUSBAR_HEIGHT 20
// 根據(jù)APP_STATUSBAR_HEIGHT判斷是否存在熱點欄
#define IS_HOTSPOT_CONNECTED (kStatusBarHeight==(SYS_STATUSBAR_HEIGHT+HOTSPOT_STATUSBAR_HEIGHT) ? YES : NO)
1. X系列機(jī)型的判斷
- 無夜之星辰分享的 判斷是否是iPhoneX系列機(jī)型
- iPhoneX系列都是劉海屏,狀態(tài)欄高度都是44缓熟,不管是普通狀態(tài)下還是特殊狀態(tài)下(通話中或熱點被接入)累魔。
- 其余機(jī)型的狀態(tài)欄高度在常規(guī)狀態(tài)下是20,特殊狀態(tài)下(通話中或熱點被接入)是40够滑。
- 因此“狀態(tài)欄高度==44”可以作為切入點垦写,判斷是否是iPhoneX系列機(jī)型的宏如下:
#define iPhoneXSeries (([[UIApplication sharedApplication] statusBarFrame].size.height == 44.0f) ? (YES):(NO))
- 缺點是這個不知道以后的iphone會怎么設(shè)計,這個方法是目前可行
- 注意:當(dāng)隱藏了狀態(tài)欄的時候狀態(tài)欄的高度是0彰触,所以根據(jù)狀態(tài)欄判斷機(jī)型前得先判斷狀態(tài)欄是否被隱藏了梯投。
- 使用安全區(qū)域判斷
#define Device_Is_iPhoneX_Devices \
({BOOL isPhoneX = NO;\
if (@available(iOS 11.0, *)) {\
isPhoneX = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0;\
}\
(isPhoneX);})
2. 全面屏的適配
下面是關(guān)于全面屏的尺寸總結(jié)的很好
- 安全區(qū)域的概念,但是只支持iOS11.0以上况毅,所以需要進(jìn)行版本判斷分蓖;
- SafeAreaiOS7以后,蘋果給UIViewController引入了topLayoutGuide 和 bottomLayoutGuide兩個屬性尔许。用于表示頂部或底部的高度么鹤。到了iOS11,蘋果棄用了topLayoutGuide和bottomLayoutGuide兩個屬性味廊。引入了safeArea代替蒸甜。官方的建議是
:不能被遮擋的內(nèi)容和控件在安全區(qū)域范圍內(nèi)顯示。如果視圖底部有按鈕余佛,在全面屏下柠新,請約束底部距離34,不要影響到Home功能辉巡。