IOS11正式版馬上就要發(fā)布了箱吕,是時(shí)候適配一波了。下面就來(lái)說(shuō)說(shuō)我適配過(guò)程中遇到的坑吧布疙。
- UITableView:默認(rèn)開(kāi)啟Self-Sizing
首先要知道Self-Sizing是個(gè)什么東東久锥∠丽看官方文檔的解釋?zhuān)?/p>
大概就是說(shuō)我們不再需要自己去計(jì)算cell的高度了,只要設(shè)置好這兩個(gè)屬性送讲,約束好布局奸笤,系統(tǒng)會(huì)自動(dòng)計(jì)算好cell的高度。IOS11以后哼鬓,Self-Sizing默認(rèn)開(kāi)啟监右,包括Headers, footers。如果項(xiàng)目中沒(méi)使用estimatedRowHeight屬性异希,在IOS11下會(huì)有奇奇怪怪的現(xiàn)象秸侣,因?yàn)镮OS11之前,estimatedRowHeight默認(rèn)為0宠互,Self-Sizing自動(dòng)打開(kāi)后味榛,contentSize和contentOffset都可能發(fā)生改變∮璧可以通過(guò)以下方式禁用:
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
- NSLocationAlwaysAndWhenInUseUsageDeion
在IOS11搏色,原有的NSLocationAlwaysUsageDeion被降級(jí)為NSLocationWhenInUseUsageDeion。因此券册,在原來(lái)項(xiàng)目中使用requestAlwaysAuthorization獲取定位權(quán)限频轿,而未在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion垂涯,系統(tǒng)框不會(huì)彈出。建議新舊key值都在plist里配置航邢,反正我試下來(lái)是沒(méi)有問(wèn)題耕赘,唯一的區(qū)別是使用requestAlwaysAuthorization獲取權(quán)限 IOS11系統(tǒng)彈框會(huì)把幾種權(quán)限級(jí)別全部列出,供用戶選擇膳殷,顯然更人性化了哈~~
- UIScrollViewContentInsetAdjustmentBehavior
IOS11 之前操骡,不想讓scrollView偏移64px,設(shè)置automaticallyAdjustsScrollViewInsets=NO就可以了赚窃。IOS11以后就廢棄了册招,使用scrollView的屬性contentInsetAdjustmentBehavior來(lái)防止偏移。
UIScrollViewContentInsetAdjustmentAutomatic
UIScrollViewContentInsetAdjustmentScrollableAxes
UIScrollViewContentInsetAdjustmentNever
UIScrollViewContentInsetAdjustmentAlways這里我們直接選Never就可以了
以上就是我項(xiàng)目中適配IOS11遇到的坑勒极,后續(xù)有坑繼續(xù)來(lái)填...
更新:
- Navigation Bar
navigation bar 的titleView支持了autolayout是掰,需要titleView自己撐開(kāi)或者重寫(xiě)了- intrinsicContentSize方法蒲牧。intrinsicContentSize顧名思義耐薯,固定大小的意思,主要是解決一些模糊約束的問(wèn)題羊精。更多知識(shí)可以看這篇文章詳解intrinsicContentSize匾七。
不做適配在IOS11會(huì)遇到的問(wèn)題:titleView對(duì)應(yīng)的View大小和預(yù)期不一致散休。
titleView對(duì)應(yīng)的View有點(diǎn)擊事件會(huì)無(wú)法觸發(fā)解決方法是直接重寫(xiě)titleView對(duì)應(yīng)View的intrinsicContentSize方法
- (CGSize)intrinsicContentSize {
return UILayoutFittingExpandedSize;
}