iOS11版本的APP適配和Xcode9的新功能

長話短說:iOS11和iPhone X發(fā)布幌氮,雖然iPhone X很丑,很失望胁澳,但是iOS 11很致命该互,讓我們的APP又得重新適配一下,很蛋疼也很惡心韭畸!


這是Xcode9變化官方文檔:developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/WhatsNewXcode/xcode_9/xcode_9.html

這是蘋果的官方指導文檔給我們來做適配:developer.apple.com/ios/human-interface-guidelines/overview/themes/

就目前來看宇智,發(fā)現(xiàn)兩個地方需要我們?nèi)ミm配:

一:iPhone X的適配



虛線是安全區(qū)域!說白了胰丁,背景必須是全屏随橘!然后視圖,頂部減去44锦庸,下部減去44机蔗,中間就是安全區(qū)域了。也就是屏幕四角的半徑為44甘萧,這個在橫屏或者豎屏下萝嘁,導航條和TabBar避開這個44就可以了!


底部千萬別添加什么手勢扬卷,而阻擋了系統(tǒng)的手勢酿愧。UIScreenEdgePanGestureRecognizer這個類是設置屏幕邊緣手勢的!需要在邊緣使用手勢的就用這個類邀泉。

二:iOS 11的適配

iOS11目前就發(fā)現(xiàn)了一個問題,UItableveView的組間距問題:之前的設置不管用了,小調(diào)一下汇恤,這樣解決:


必須添加這個兩個屬性E痈帧!因谎!否則代理設置的高度無效基括,沒有效果!

_accountTableView.sectionHeaderHeight = 0;

_accountTableView.sectionFooterHeight = 8;


然后再用代理里面的方法設置組間距财岔,想要自定義风皿,就在代理進行分別設置!

導航欄

導航欄高度的變化

iOS11之前導航欄默認高度為64pt(這里高度指statusBar + NavigationBar)桐款,iOS11之后如果設置了prefersLargeTitles = YES則為96pt夷恍,默認情況下還是64pt魔眨,但在iPhoneX上由于劉海的出現(xiàn)statusBar由以前的20pt變成了44pt酿雪,所以iPhoneX上高度變?yōu)?8pt遏暴,如果項目里隱藏了導航欄加了自定義按鈕之類的,這里需要注意適配一下朋凉。

導航欄圖層及對titleView布局的影響

iOS11之前導航欄的title是添加在UINavigationItemView上面,而navigationBarButton則直接添加在UINavigationBar上面磺芭,如果設置了titleView,則titleView也是直接添加在UINavigationBar上面放棒。iOS11之后损肛,大概因為largeTitle的原因,視圖層級發(fā)生了變化捏检,如果沒有給titleView賦值粟焊,則titleView會直接添加在_UINavigationBarContentView上面香追,如果賦值了titleView,則會把titleView添加在_UITAMICAdaptorView上则果,而navigationBarButton被加在了_UIButtonBarStackView上饰及,然后他們都被加在了_UINavigationBarContentView上鼎兽,如圖:


再補充一點答姥,看了簡書App適配iOS11 發(fā)現(xiàn)titleView支持autolayout,這要求titleView必須是能夠自撐開的或?qū)崿F(xiàn)了- intrinsicContentSize方法

-?(CGSize)intrinsicContentSize?{

returnUILayoutFittingExpandedSize;

}


UIScrollView谚咬、UITableView鹦付、UICollectionView

大家在iOS11設備上運行出現(xiàn)最多問題應該就是tableview莫名奇妙的偏移20pt或者64pt了。择卦。原因是iOS11棄用了automaticallyAdjustsScrollViewInsets屬性敲长,取而代之的是UIScrollView新增了contentInsetAdjustmentBehavior屬性,這一切的罪魁禍首都是新引入的safeArea秉继,關于safeArea適配這篇文章iOS 11 安全區(qū)域適配總結講的很詳細祈噪,感興趣的可以看下,我直接貼適配代碼尚辑,因為低版本直接用contentInsetAdjustmentBehavior會報警告辑鲤,所有定義了如下的宏(感謝@炒雞范的指正,之前的宏犯了個低級錯誤...現(xiàn)改為)


#define??adjustsScrollViewInsets(scrollView)\

do{\

_Pragma("clang?diagnostic?push")\

_Pragma("clang?diagnostic?ignored?\"-Warc-performSelector-leaks\"")\

if([scrollView?respondsToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")])?{\

NSMethodSignature?*signature?=?[UIScrollView?instanceMethodSignatureForSelector:@selector(setContentInsetAdjustmentBehavior:)];\

NSInvocation?*invocation?=?[NSInvocation?invocationWithMethodSignature:signature];\

NSInteger?argument?=2;\

invocation.target?=?scrollView;\

invocation.selector?=?@selector(setContentInsetAdjustmentBehavior:);\

[invocation?setArgument:&argument?atIndex:2];\

[invocation?retainArguments];\

[invocation?invoke];\

}\

_Pragma("clang?diagnostic?pop")\

}while(0)


還有的發(fā)現(xiàn)某些界面tableView的sectionHeader杠茬、sectionFooter高度與設置不符的問題月褥,在iOS11中如果不實現(xiàn) -tableView: viewForHeaderInSection:和-tableView: viewForFooterInSection: ,則-tableView: heightForHeaderInSection:和- tableView: heightForFooterInSection:不會被調(diào)用瓢喉,導致它們都變成了默認高度宁赤,這是因為tableView在iOS11默認使用Self-Sizing,tableView的estimatedRowHeight栓票、estimatedSectionHeaderHeight决左、 estimatedSectionFooterHeight三個高度估算屬性由默認的0變成了UITableViewAutomaticDimension,解決辦法簡單粗暴逗载,就是實現(xiàn)對應方法或把這三個屬性設為0哆窿。

如果你使用了Masonry,那么你需要適配safeArea

if(@available(iOS11.0,?*))?{

make.edges.equalTo()(self.view.safeAreaInsets)

}else{

make.edges.equalTo()(self.view)

}


PhoneX

LaunchImage

關于iPhoneX(我就不吐槽劉海了...)厉斟,如果你的APP在iPhoneX上運行發(fā)現(xiàn)沒有充滿屏幕挚躯,上下有黑色區(qū)域,那么你應該也像我一樣LaunchImage沒有用storyboard而是用的Assets擦秽,解決辦法如圖码荔,啟動圖的尺寸為1125x2436漩勤,or you caniOS開發(fā)時如何使用 Launch Screen Storyboard



TabBarController

因為我們的項目用了第三方的TabBarController,在iPhoneX運行缩搅,tabBar看起來怪怪的...估計作者要等到猴年馬月才適配iPhoneX越败,項目又著急上線,就自己修改了第三方硼瓣,主要是tabBar高度及tabBarItem偏移適配究飞,iPhoneX由于底部安全區(qū)的原因UITabBar高度由49pt變成了83pt,可以通過判斷機型來修改相關界面代碼

1#define?kDevice_Is_iPhoneX?([UIScreen?instancesRespondToSelector:@selector(currentMode)]???CGSizeEqualToSize(CGSizeMake(1125,2436),?[[UIScreen?mainScreen]?currentMode].size)?:?NO)

目前遇到的就這些坑堂鲤,歡迎大家指正補充~

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亿傅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瘟栖,更是在濱河造成了極大的恐慌葵擎,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件半哟,死亡現(xiàn)場離奇詭異酬滤,居然都是意外死亡,警方通過查閱死者的電腦和手機寓涨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門盯串,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缅茉,你說我怎么就攤上這事嘴脾。” “怎么了蔬墩?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵译打,是天一觀的道長。 經(jīng)常有香客問我拇颅,道長奏司,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任樟插,我火速辦了婚禮韵洋,結果婚禮上,老公的妹妹穿的比我還像新娘黄锤。我一直安慰自己搪缨,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布鸵熟。 她就那樣靜靜地躺著副编,像睡著了一般。 火紅的嫁衣襯著肌膚如雪流强。 梳的紋絲不亂的頭發(fā)上痹届,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天呻待,我揣著相機與錄音,去河邊找鬼队腐。 笑死蚕捉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的柴淘。 我是一名探鬼主播迫淹,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悠就!你這毒婦竟也來了千绪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤梗脾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盹靴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炸茧,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年稿静,在試婚紗的時候發(fā)現(xiàn)自己被綠了梭冠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡改备,死狀恐怖控漠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悬钳,我是刑警寧澤盐捷,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站默勾,受9級特大地震影響碉渡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜母剥,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一滞诺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧环疼,春花似錦习霹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至等限,卻和暖如春爸吮,著一層夾襖步出監(jiān)牢的瞬間芬膝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工形娇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锰霜,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓桐早,卻偏偏與公主長得像癣缅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哄酝,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 搞事一:導航欄1.導航欄高度變化導航欄在iOS10之前都是默認的64p友存,但是,到了iOS10就不單單是64p了陶衅,可...
    貝勒老爺閱讀 1,043評論 0 13
  • App界面適配iOS11(包括iPhoneX的奇葩尺寸) 一劍孤城關注 2017.08.15 11:15*字數(shù) 1...
    珊珊大王閱讀 987評論 0 2
  • 博客傳送門前陣子項目開發(fā)忙成狗屡立,就一直沒做iOS11的適配,直到XcodeGM版發(fā)布后搀军,我胸有成竹的在iPhone...
    張月半閱讀 30,048評論 55 239
  • 上午第二節(jié)膨俐、第三節(jié)課在班級進行了期中模擬測試。不是想在考前猜題之類罩句,沒有意義焚刺!只是想讓孩子們熟悉一下,所謂...
    呵媽閱讀 252評論 0 1
  • 為什么要登山,因為山在那兒屯远。世界為什么這樣蔓姚,因為它本來就那樣。 這是什么觀點氓润?什么世界觀赂乐?樸素...
    眼睛去旅行閱讀 883評論 0 0