1. 程式人生 > >UITableView:默認開啟Self-Sizing

UITableView:默認開啟Self-Sizing

彈出 win list 選擇 offset 都在 avi key值 過程

IOS11正式版馬上就要發布了,是時候適配一波了。下面就來說說我適配過程中遇到的坑吧。
UITableView:默認開啟Self-Sizing

首先要知道Self-Sizing是個什麽東東。看官方文檔的解釋:

Self-Sizing

大概就是說我們不再需要自己去計算cell的高度了,只要設置好這兩個屬性,約束好布局,系統會自動計算好cell的高度。IOS11以後,Self-Sizing默認開啟,包括Headers, footers。如果項目中沒使用estimatedRowHeight屬性,在IOS11下會有奇奇怪怪的現象,因為IOS11之前,estimatedRowHeight默認為0,Self-Sizing自動打開後,contentSize和contentOffset都可能發生改變。可以通過以下方式禁用:

self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
NSLocationAlwaysAndWhenInUseUsageDeion

在IOS11,原有的NSLocationAlwaysUsageDeion被降級為NSLocationWhenInUseUsageDeion。因此,在原來項目中使用requestAlwaysAuthorization獲取定位權限,而未在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion,系統框不會彈出。建議新舊key值都在plist裏配置,反正我試下來是沒有問題,唯一的區別是使用requestAlwaysAuthorization獲取權限 IOS11系統彈框會把幾種權限級別全部列出,供用戶選擇,顯然更人性化了哈~~

定位
UIScrollViewContentInsetAdjustmentBehavior

IOS11 之前,不想讓scrollView偏移64px,設置automaticallyAdjustsScrollViewInsets=NO就可以了。IOS11以後就廢棄了,使用scrollView的屬性contentInsetAdjustmentBehavior來防止偏移。

UIScrollViewContentInsetAdjustmentAutomatic
UIScrollViewContentInsetAdjustmentScrollableAxes
UIScrollViewContentInsetAdjustmentNever
UIScrollViewContentInsetAdjustmentAlways

這裏我們直接選Never就可以了
以上就是我項目中適配IOS11遇到的坑,後續有坑繼續來填…

更新:


Navigation Bar
navigation bar 的titleView支持了autolayout,需要titleView自己撐開或者重寫了- intrinsicContentSize方法。intrinsicContentSize顧名思義,固定大小的意思,主要是解決一些模糊約束的問題。更多知識可以看這篇文章詳解intrinsicContent www.xbylpt5.cn Size。
不做適配在IOS11會遇到的問題:

titleView對應的View大小和預期不一致。
titleView對應的View有點擊事件會無法觸發

解決方法是直接重寫t www.078881.cn/itleView對應View的www.hjd157.com intrinsicContentSize方法

- (CGSize)intrinsicContentSize {
return UILayoutFittingExpandedSize;

UITableView:默認開啟Self-Sizing