
????中文介紹
隨著iPhone X的銷售,相信各位土豪很多都已經(jīng)入手iPhone X了吧,反正我是比較喜歡的,無奈囊中羞澀,只能玩玩模擬器了。
iPhone X 鎮(zhèn)樓

1.科普模擬器樣式
xcode 9 模擬器自帶保護(hù)套,有人喜歡有人厭,據(jù)說大神都念舊,其實(shí)模擬器是可以調(diào)的,如果你用的本的屏幕比較小,你可以把鼠標(biāo)放在模擬器四周調(diào)節(jié)大小。如果你想找回以前的感覺,請跟著下圖做:


2.科普iPhone X的設(shè)計(jì)圖

從這個(gè)圖里面,我們可以看到
iPhone X的邊框都是圓角,這證明了蘋果的發(fā)展方向,從6開始的圓弧到現(xiàn)在的X,扁平化更加突出,從上圖的樣式可以看出,幾乎就像一張紙。這張圖上我們可以看出來狀
態(tài)欄變了,為了迎合齊劉海,iPhone X的狀態(tài)欄從原來的20變更為現(xiàn)在的44。
3.科普啟動頁的適配
iPhone X采用的是跟plus一樣的
@3x圖,而不是大家臆想出來的@4x圖。記得昨天,上周設(shè)計(jì)妹妹釘釘上問我,iPhone X難道要單獨(dú)做套圖嗎?惡作劇的心理調(diào)戲妹子,我回了個(gè)??,妹子傻乎乎的開始切圖,切著罵著我曹,四倍圖還得計(jì)算,草草草,我裝著啥也沒聽到,出去抽根煙回來,妹子告訴我,先給你幾張圖吧,我晚上估計(jì)得加班了,我看看妹子說,晚上請我吃飯,我只讓你切一張圖,其余我用代碼實(shí)現(xiàn),妹子當(dāng)時(shí)高興地差點(diǎn)抱住我,這逼我感覺裝的可以。言歸正傳啊,如果你用的是LaunchImage來管理啟動頁的,去找妹子弄一張1125 * 2436的圖,如果你使用的是LaunchScreen來管理啟動頁的,你也可以去找妹子要張圖,畢竟UI妹子都很萌的,開玩笑啦,主要是iPhone X的寬高比發(fā)生了變化,8的寬度,8p他哥的高度。記住啊,1125 * 2436
4.導(dǎo)航欄的適配
其實(shí)吧很簡單的,我就自定義了幾個(gè)宏,全局替換了一下,誰讓我跟不上蘋果爸爸的步伐呢,把導(dǎo)航欄高度全部寫死為
64了。
/************************ 屏幕尺寸 ***************************/
// 屏幕寬度
let JMTWindowWidth = UIScreen.main.bounds.size.width
// 屏幕高度
let JMTWindowHeight = UIScreen.main.bounds.size.height
// iPhone4
let isIphone4 = JMTWindowHeight < 568 ? true : false
// iPhone 5
let isIphone5 = JMTWindowHeight == 568 ? true : false
// iPhone 6
let isIphone6 = JMTWindowHeight == 667 ? true : false
// iphone 6P
let isIphone6P = JMTWindowHeight == 736 ? true : false
// iphone X
let isIphoneX = JMTWindowHeight == 812 ? true : false
// navigationBarHeight
let navigationBarHeight : CGFloat = isIphoneX ? 88 : 64
// tabBarHeight
let tabBarHeight : CGFloat = isIphoneX ? 49 + 34 : 49
其實(shí)吧,這就是懶散造成的,代碼不規(guī)范,我常給團(tuán)隊(duì)的人開會說,不要在代碼里出現(xiàn)太多的重復(fù)代碼,重復(fù)數(shù)字,重復(fù)字符串等等等等,我們要保持代碼簡潔優(yōu)美,哈哈哈,說歸說,做歸做,不過我別的都做到了,就這一個(gè)疏忽啊,因?yàn)檎l想到他還會變呢。


5.MJRefresh和繼承自UIScrollView的視圖的iOS 11適配
背景:前兩天一個(gè)同行問我了一個(gè)問題:
問題
還有就是說如果你使用了MJRefresh進(jìn)行刷新,并且你隱藏了導(dǎo)航欄,就會出現(xiàn)下拉刷新錯(cuò)亂的問題。
這跟我這哥們問的問題是一種類型的,因?yàn)?code>iOS 11上廢除了automaticallyAdjustsScrollViewInsets這個(gè)方法,使用UIScrollView's contentInsetAdjustmentBehavior來代替,解決辦法就是一段代碼:
OC:
if (@available(iOS 11.0, *)) {
self.collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
swift:
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
} else {
self.automaticallyAdjustsScrollViewInsets = false
}
因?yàn)楦鐐兪荗C寫的項(xiàng)目,大家用的時(shí)候注意寫成Swift。
6.iPhone X 腳底適配
腳底適配,這個(gè)就要看你們公司產(chǎn)品的意見了。
其實(shí)底部圓角距離是34。
說白了就是設(shè)置你底部按鈕距離下邊界34。
注意不要讓上面的視圖蓋到了底部按鈕。因?yàn)?code>viewSafeAreaInsetsDidChange調(diào)用順序?qū)嵲?code>viewWillAppear之后,在viewWillLayoutSubvies之前調(diào)用。
7.iOS 11 下tableView的頭視圖和腳視圖
在iOS11里面有時(shí)候在tableView的頭部和尾部留白,因?yàn)樘O果給滾動試圖加進(jìn)去了
self-sizeing,開始計(jì)算逐步計(jì)算contentSize,默認(rèn)如果不去實(shí)現(xiàn)viewForHeaderInSection就不會調(diào)用heightForHeaderInSection,尾部試圖一樣。
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return nil
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return nil
}
如果你不想實(shí)現(xiàn)viewForHeaderInSection也不想留白,那么只需要你把self-sizeing自動估高關(guān)閉即可
/// 自動關(guān)閉估算高度,不想估算那個(gè),就設(shè)置那個(gè)即可
self.tableView.estimatedRowHeight = 0
self.tableView.estimatedSectionHeaderHeight = 0
self.tableView.estimatedSectionFooterHeight = 0
8. xcode 無線真機(jī)測試
這應(yīng)該是xcode 9的一個(gè)亮點(diǎn)吧,但是速度真的不敢恭維。注意手機(jī)和電腦必須在同一個(gè)局域網(wǎng)內(nèi)
首先使用手機(jī)連接xcode之后,打開window->Devices and Simulator->勾選Show as run destination和Connect via network,這樣就可以無線測試了,反正我還用線吧,因?yàn)槲沂莻€(gè)傳統(tǒng)的人。
9.iOS 11 真機(jī)地圖
在
iOS 11地圖適配,在iOS11中,如果使用到地圖,我們就需要在info,里面添加NSLocationAlwaysAndWhenInUseUsageDescription和NSLocationWhenInUseUsageDescription才可以在iOS 11里面正常調(diào)出地圖。
總結(jié)
最近懶得要死,什么都提不起勁,所以文章拖到現(xiàn)在才寫。各位請見諒,嘻嘻。有人買X的話,留個(gè)言,只要告訴我,玩著美不美就行了。
