一跷坝、iPhone X的適配
1倦蚪、iPhone X侣诵, 5.8 英寸,屏幕分辨率為 1242 x 2800
除去底部固定的功能區(qū)痢法,屏幕顯示范圍的尺寸為 5.15 英寸,458ppi杜顺。
豎屏尺寸:1125px × 2436px(375pt × 812pt @3x)
橫屏尺寸:2436px × 1125px(812pt × 375pt @3x)
iPhone 7 設(shè)備渲染后分辨率為 750 x 1334财搁,邏輯分辨率只有 375 x 667。
iPhone X 設(shè)備渲染后分辨率為 1125 x 2436躬络,邏輯分辨率是為 375 x 812尖奔。
所以 除去下巴的功能區(qū),iPhone X與 4.7 寸的7同寬穷当,但是高度多了一截提茁。145pt,導(dǎo)致多出了大約 20%的垂直高度馁菜。
2茴扁、iPhone X機(jī)型判斷
- 可以拿分辨率來(lái)判斷。
#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125,2436), [[UIScreen mainScreen] currentMode].size) : NO)
或者:
#define IS_IPHONEX (([[UIScreen mainScreen] bounds].size.height-812)?NO:YES)
- Devive Model
if ([platform isEqualToString:@"iPhone10,1"]) return @"iPhone 8";
if ([platform isEqualToString:@"iPhone10,4"]) return @"iPhone 8";
if ([platform isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus";
if ([platform isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus";
if ([platform isEqualToString:@"iPhone10,3"]) return @"iPhone X";
if ([platform isEqualToString:@"iPhone10,6"]) return @"iPhone X";
3汪疮、如果發(fā)現(xiàn)有的屬性沒(méi)有了峭火,可以用runtime判斷一下再使用
- 引入庫(kù)
include <objc/runtime.h> - 以系統(tǒng)對(duì)象為例,正常情況下我們無(wú)法查看系統(tǒng)對(duì)象的私有屬性铲咨,如下方法可以得到其全部屬性躲胳。
以相冊(cè)的PHAsset為例:
for (PHAsset *asset inself.assetsFetchResults) {
unsigned int count;
// 獲取屬性列表
objc_property_t *propertyList = class_copyPropertyList([asset class], &count);
for (unsigned int i = 0; i<count; i++) {
const char *propertyName = property_getName(propertyList[i]);
NSLog(@"property----="">%@", [NSString stringWithUTF8String:propertyName]);
}
}
4、導(dǎo)航欄和tabbar
iPhone X 的狀態(tài)欄高度為 44 pt 纤勒,以前的手機(jī)為20 pt坯苹。經(jīng)過(guò)我的測(cè)試,X 的 tabbar 以前為 49 pt摇天,現(xiàn)在是 83粹湃,故高出了 34 pt。
5泉坐、Safe Area
在沒(méi)有狀態(tài)欄和tabbar的 iPhone 8 里为鳄,Safe Area 是指整個(gè)屏幕。加入狀態(tài)欄后腕让,Safe Area 便向下減少了 20 個(gè)點(diǎn)孤钦。當(dāng)加入 Navigation 的時(shí)候歧斟,Safe Area 又減少了 44 個(gè)點(diǎn)。再加入 Tabbar 的時(shí)候偏形,Safe Area 又減少了49 pt静袖。
在 iPhone X 里,當(dāng)我們沒(méi)有使用狀態(tài)欄時(shí)俊扭,Safe Area 依然和上下邊有一定的距離队橙。按照我的測(cè)量,此時(shí)距離底部應(yīng)該是 43 個(gè)點(diǎn)萨惑,距離頂部應(yīng)該是 44 個(gè)點(diǎn)捐康。同理,加入不同 Bar 之后庸蔼,iPhone X 的 Safe Area 都會(huì)有相應(yīng)的變化解总。
6、如何使用Safe Area
(1)朱嘴、在xib中選中 Use Safe Area LayOUT Guides 就可以了倾鲫。
(2)粗合、代碼:
if #available(iOS 11, *) {
let guide = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
greenView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),
guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)])
}
4萍嬉、TabBar高度拉伸、壓縮的問(wèn)題
如果是那種自定義TabBar中間是按鈕的這種操作隙疚,我試了一下壤追,之前中間按鈕的高度設(shè)置的是TabBar的高度( CGFloat buttonH = self.frame.size.height;),現(xiàn)在直接賦值供屉,也可以解決這種問(wèn)題 行冰。CGFloat buttonH = 49;
二、iPhone X的底部
根據(jù)蘋果設(shè)計(jì)規(guī)范一般內(nèi)容不應(yīng)該覆蓋home鍵的地方伶丐。
如圖:
但是如果展示的是TableView悼做、CollectionView等滾動(dòng)查看內(nèi)容的控件,應(yīng)該讓這些控件填滿屏幕哗魂,也就是 要覆蓋下面的home鍵肛走。如圖(以設(shè)置中的Safari設(shè)置為例):
內(nèi)容的底部
有的app因?yàn)闆](méi)有設(shè)置iPhone X的閃圖,或者沒(méi)用storyboard做閃圖录别,會(huì)導(dǎo)致app打開后頂部和底部 有很大的黑色空白朽色,這樣是不對(duì)的。如圖:
三组题、Xcode9
1葫男、app不能全屏,上下各自有黑色空白
解決辦法:
直接用LaunchScreen.xib或者LaunchScreen.storyboard進(jìn)行配置啟動(dòng)圖崔列,這樣app就能全屏了梢褐。
2、command鍵 點(diǎn)擊鼠標(biāo)后默認(rèn)彈出的是選擇列表
如果想command鍵復(fù)原∮龋可在Preferences --> Navigation -->Commadn-click 中選擇Jumps to Defintion即可趣效。
3、Xcode 9 打包時(shí)
記得在icon的添加1024*1024的圖標(biāo)
4猪贪、無(wú)線聯(lián)調(diào)
雞肋的無(wú)線調(diào)試功能(iPhone的電池...)可在Window -->Devices and Simulators中勾選那兩個(gè)選項(xiàng)跷敬。前提是此設(shè)備已run過(guò)并處于同一局域網(wǎng)下。
5热押、Asset新建顏色
在Asset中西傀,可以創(chuàng)建顏色了。右鍵選擇New Color set桶癣,填充RGBA值或十六進(jìn)制值即可拥褂。使用中直接使用新的colorwithname,參數(shù)填入創(chuàng)建時(shí)的名字即可牙寞。不過(guò)記得區(qū)分系統(tǒng)版本饺鹃。