適配iPhoneX和Xcode9

一跷坝、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)版本饺鹃。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市间雀,隨后出現(xiàn)的幾起案子悔详,更是在濱河造成了極大的恐慌,老刑警劉巖惹挟,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茄螃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡连锯,警方通過(guò)查閱死者的電腦和手機(jī)归苍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)运怖,“玉大人拼弃,你說(shuō)我怎么就攤上這事∫≌梗” “怎么了吻氧?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吗购。 經(jīng)常有香客問(wèn)我医男,道長(zhǎng),這世上最難降的妖魔是什么捻勉? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任镀梭,我火速辦了婚禮,結(jié)果婚禮上踱启,老公的妹妹穿的比我還像新娘报账。我一直安慰自己研底,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布透罢。 她就那樣靜靜地躺著榜晦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羽圃。 梳的紋絲不亂的頭發(fā)上乾胶,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音朽寞,去河邊找鬼识窿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脑融,可吹牛的內(nèi)容都是我干的喻频。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼肘迎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼甥温!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起妓布,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤姻蚓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后秋茫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體史简,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年肛著,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跺讯。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枢贿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刀脏,到底是詐尸還是另有隱情局荚,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布愈污,位于F島的核電站耀态,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏暂雹。R本人自食惡果不足惜首装,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杭跪。 院中可真熱鬧仙逻,春花似錦驰吓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缺亮,卻和暖如春翁涤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萌踱。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工迷雪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虫蝶。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓章咧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親能真。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赁严,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容