App適配iOS 11

隨著Xcode GM版本發(fā)布,適配iOS 11也就提上了日程,總的來(lái)說(shuō)整個(gè)適配過(guò)程(不包含適配iPhone X)不是很麻煩。

首先建議觀看今年WWDC的一個(gè)視頻Updating Your App for iOS 11,視頻講解了iOS 11一些API的變化,對(duì)理解適配過(guò)程有幫助。

navigation bar

1、導(dǎo)航欄新增了一種大標(biāo)題樣式,默認(rèn)設(shè)置是不開啟,所以不需要修改。

2、titleView支持autolayout,這要求titleView必須是能夠自撐開的或?qū)崿F(xiàn)了- intrinsicContentSize,簡(jiǎn)書的搜索就變成下面這樣了

搜索

解決辦法比較簡(jiǎn)單,這個(gè)搜索框?qū)?yīng)的view實(shí)現(xiàn)- intrinsicContentSize方法

1

2

3-?(CGSize)intrinsicContentSize?{

returnUILayoutFittingExpandedSize;

}

安全區(qū)域適配

iOS 11中ViewController的automaticallyAdjustsScrollViewInsets屬性被廢棄了,導(dǎo)致了這兩個(gè)頁(yè)面出現(xiàn)了問(wèn)題

這兩個(gè)頁(yè)面都隱藏了系統(tǒng)導(dǎo)航欄,自定義導(dǎo)航欄。

1

2

3self.automaticallyAdjustsScrollViewInsets?=?NO;

self.extendedLayoutIncludesOpaqueBars?=?YES;

self.edgesForExtendedLayout?=?UIRectEdgeTop;

automaticallyAdjustsScrollViewInsets屬性被廢棄了,頂部就多了一定的inset,關(guān)于安全區(qū)域適配,簡(jiǎn)書上的這篇文章iOS 11 安全區(qū)域適配總結(jié)介紹得非常詳細(xì),請(qǐng)參考這篇文章。

我們采用了比較簡(jiǎn)單的方法

1

2

3

4

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

self.tableView.contentInsetAdjustmentBehavior?=?UIScrollViewContentInsetAdjustmentNever;

}else{

self.automaticallyAdjustsScrollViewInsets?=?NO;

}

導(dǎo)航欄返回按鈕

之前的代碼通過(guò)下面的方式自定義返回按鈕

1

2

3

4

5

6

7UIImage?*backButtonImage?=?[[UIImage?imageNamed:@"icon_tabbar_back"]

resizableImageWithCapInsets:UIEdgeInsetsMake(0,18,0,0)];

[[UIBarButtonItem?appearance]?setBackButtonBackgroundImage:backButtonImage

forState:UIControlStateNormal

barMetrics:UIBarMetricsDefault];

[[UIBarButtonItem?appearance]?setBackButtonTitlePositionAdjustment:UIOffsetMake(0,?-60)

forBarMetrics:UIBarMetricsDefault];

iOS 11 中setBackButtonTitlePositionAdjustment:UIOffsetMake沒(méi)法把按鈕移出navigation bar。

解決方法是設(shè)置navigationController的backIndicatorImage和backIndicatorTransitionMaskImage

1

2

3UIImage?*backButtonImage?=?[[UIImage?imageNamed:@"icon_tabbar_back"]?imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

self.navigationBar.backIndicatorImage?=?backButtonImage;

self.navigationBar.backIndicatorTransitionMaskImage?=?backButtonImage;

tableview問(wèn)題

右邊為正確樣式

iOS

11中如果不實(shí)現(xiàn)-tableView: viewForFooterInSection: 和 -tableView:

viewForHeaderInSection:,那么-tableView: heightForHeaderInSection:和-

tableView: heightForFooterInSection:不會(huì)被調(diào)用。

這是因?yàn)閑stimatedRowHeight

estimatedSectionHeaderHeight

estimatedSectionFooterHeight三個(gè)高度估算屬性由默認(rèn)的0變成了UITableViewAutomaticDimension,導(dǎo)致高度計(jì)算不對(duì),解決方法是實(shí)現(xiàn)對(duì)應(yīng)方法或吧這三個(gè)屬性設(shè)為0。

下面這個(gè)列表顯示不全也是estimatedRowHeight引起,取contentSize出錯(cuò)。

第三方依賴庫(kù)問(wèn)題

1、ReactiveCocoa Unknown warning group ‘-Wreceiver-is-weak’,ignored警告

ReactiveCocoa

簡(jiǎn)書項(xiàng)目開啟Treat warning as error,所有警告都會(huì)被當(dāng)成錯(cuò)誤,因此必須解決掉。

RACObserve宏定義如下:

1

2

3

4

5

6

7

8#define?RACObserve(TARGET,?KEYPATH)?\

({?\

_Pragma("clang?diagnostic?push")?\

_Pragma("clang?diagnostic?ignored?\"-Wreceiver-is-weak\"")?\

__weak?id?target_?=?(TARGET);?\

[target_?rac_valuesForKeyPath:@keypath(TARGET,?KEYPATH)?observer:self];?\

_Pragma("clang?diagnostic?pop")?\

})

在之前的Xcode中如果消息接受者是一個(gè)weak對(duì)象,clang編譯器會(huì)報(bào)receiver-is-weak警告,所以加了這段push&pop,最新的clang已經(jīng)把這個(gè)警告給移除,所以沒(méi)必要加push&pop了。

ReactiveCocoa已經(jīng)不再維護(hù)OC版本,大多數(shù)OC開發(fā)者用的都是2.5這個(gè)版本,只能自己fork一份了,誰(shuí)知github上的v2.5代碼不包含對(duì)應(yīng)的.podspec文件,只好到CocoaPods/Specs上將對(duì)應(yīng)的json文件翻譯成.podspec文件,如果你也有這個(gè)需要,可以修改Podfile如

1

pod'ReactiveCocoa',?:git?=>'https://github.com/zhao0/ReactiveCocoa.git',?:tag?=>'2.5.2'

2、MGSwipeTableCell 崩潰

左滑cell

MGSwipeTableCell用于實(shí)現(xiàn)左滑菜單,在iOS 11上出現(xiàn)了崩潰,github上新版修復(fù)了,升級(jí)即可

最后,感謝我女朋友在我寫這篇文章的時(shí)候喂我吃水果。

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 隨著Xcode GM版本發(fā)布,適配iOS 11也就提上了日程,總的來(lái)說(shuō)整個(gè)適配過(guò)程(不包含適配iPhone X)不...
    貝勒老爺閱讀 863評(píng)論 0 7
  • 隨著Xcode GM版本發(fā)布,適配iOS 11也就提上了日程,總的來(lái)說(shuō)整個(gè)適配過(guò)程(不包含適配iPhone X)不...
    碳酸補(bǔ)鈣專家閱讀 414評(píng)論 0 0
  • 隨著Xcode GM版本發(fā)布,適配iOS 11也就提上了日程,總的來(lái)說(shuō)整個(gè)適配過(guò)程(不包含適配iPhone X)不...
    知傲閱讀 36,106評(píng)論 135 426
  • 隨著Xcode GM版本發(fā)布,適配iOS 11也就提上了日程,總的來(lái)說(shuō)整個(gè)適配過(guò)程(不包含適配iPhone X)不...
    xiaon閱讀 492評(píng)論 0 0
  • N0.11 3月1日 晴 花,是這世間最美的芳華,是整個(gè)冬日積蓄和醞釀的綻放。 我愛(ài)春日里花開的嬌美。那個(gè)知名的...
    瑞和她的淺島繁花閱讀 393評(píng)論 0 2

友情鏈接更多精彩內(nèi)容