屏幕尺寸数据
手机机型(iPhone) |
屏幕尺寸(inch) |
逻辑分辨率(pt) |
设备分辨率(px) |
缩放因子 (Scale Factor) |
像素密度(ppi) |
3GS |
3.5 |
320×480 |
320×480 |
@1x |
163 |
4(s) |
3.5 |
320×480 |
640×960 |
@2x |
326 |
5(s/se) |
4 |
320×568 |
640×1136 |
@2x |
326 |
6(s)/7/8 |
4.7 |
375×667 |
750×1334 |
@2x |
326 |
6(s)/7/8 Plus |
5.5 |
414×736 |
1242×2208 |
@3x |
401 |
X/XS/11 Pro |
5.8 |
375×812 |
1125×2436 |
@3x |
458 |
XR/11 |
6.1 |
414×896 |
828×1792 |
@2x |
326 |
XS Max/11 Pro Max |
6.5 |
414×896 |
1242×2688 |
@3x |
458 |
12 mini/13mini |
5.4 |
375×812 |
1080×2340 |
@3x |
467 |
12/12 Pro/13/13 Pro/14 |
6.1 |
390×844 |
1170×2532 |
@3x |
460 |
12 Pro Max/13 Pro Max/14 Plus |
6.7 |
428×926 |
1284×2778 |
@3x |
458 |
14 Pro |
6.1 |
393×852 |
1179×2556 |
@3x |
460 |
14 Pro Max |
6.7 |
430×932 |
1290×2796 |
@3x |
460 |
iPhone 状态栏/导航栏/tabbar高度
手机机型(iPhone) |
状态栏高度(pt) |
导航栏高度(pt) |
tabbar高度(pt) |
x以前 |
20/40 |
44 |
49 |
x以后 |
44 |
44 |
83 |
综上:导航栏以下的视图顶部的y坐标非全面屏手机应该为64,全面屏
变成88了。底部Tabbar也由原来的49,增加了34,变成了83的高度。
注意:iOS 14 iPhone11/iPhone12的状态栏高度为48/47,导航高度为92/91
因此,对导航高度的宏定义不能直接用64和88两个高度来区分非全面屏和全面屏。具体如下
如果对导航视图高度要求比较准确的话可以根据屏幕宽高判断具体机型,再进行宏定义,状态栏隐藏的情况下iPhone11(48)、iPhone12(47)状态栏高度有误差
// 屏幕宽度
#define KSCreenWidth [[UIScreen mainScreen] bounds].size.width
// 屏幕高度
#define KSCreenHeight [[UIScreen mainScreen] bounds].size.height
// 是否是iPhone
#define kIs_iphone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
// 是否为全面屏
#define kIs_iPhoneX KSCreenWidth >=375.0f && KSCreenHeight >=812.0f&& kIs_iphone
// 状态栏是否隐藏
#define kStatusBarIsHidden ([[UIApplication sharedApplication] isStatusBarHidden])
// 状态栏高度 注意:状态栏隐藏的情况下iPhone11(48)、iPhone12(47)状态栏高度有误差
#define StatusBarHeight (!kStatusBarIsHidden ? [[UIApplication sharedApplication] statusBarFrame].size.height : (kIs_iPhoneX ? 44.f : 20.f))
// 导航栏高度
#define NavigationBarHeight 44.f
// 菜单栏高度
#define TabbarHeight (kIs_iPhoneX ? (49.f+34.f) : 49.f)
// 菜单栏底部安全距离
#define TabbarSafeBottomMargin (kIs_iPhoneX ? 34.f : 0.f)
// Status bar & navigation bar height.
#define StatusBarAndNavigationBarHeight (StatusBarHeight + NavigationBarHeight)