最近一直在做項(xiàng)目的iOS11兼容喉誊,這里整理了一些大致出現(xiàn)的問題渔隶,希望能給各位同學(xué)一些幫助
1.UIScrollVierw出現(xiàn)偏移
原因分析
iOS11把控制器的 self.automaticallyAdjustsScrollViewInsets
屬性給拋棄了羔挡。
之前是通過代碼把該值設(shè)置為NO,并且設(shè)置UIScrollView的contentInset屬性來讓內(nèi)容不被導(dǎo)航欄擋住间唉。
iOS11的UIScrollView新加了了一個(gè)屬性為contentInsetAdjustmentBehavior
绞灼,在普通iPhone上默認(rèn)會(huì)為UIScrollView增加一個(gè)64的間距,現(xiàn)在我又通過contentInset加了一個(gè)64的間距终吼,所有才會(huì)導(dǎo)致圖中出現(xiàn)的問題镀赌。
解決方法
設(shè)置UIScrollView的contentInsetAdjustmentBehavior
為UIScrollViewContentInsetAdjustmentNever
即可。
這里特別需要特別注意的是际跪,iOS11上許多同學(xué)使用的MJRefresh
下拉刷新框架會(huì)出現(xiàn)抖動(dòng)之類的情況商佛,同樣也是更改這個(gè)屬性的值可以解決該問題。
如果你的項(xiàng)目里像我一樣大多數(shù)VC的automaticallyAdjustsScrollViewInsets
都是NO的話姆打,可以使用MethodSwizzling修改所有UIScrollView的新屬性良姆。
2.navigationItem.titleView中的自定義搜索框莫名變短一截
以前僅僅只是左右有些許的間距,可以看到在iOS11中的間距非常大幔戏。
原因分析
通過查找資料發(fā)現(xiàn)玛追,iOS11中的titleView開始支持autolayout,這要求titleView必須是能夠自撐開的或?qū)崿F(xiàn)了- intrinsicContentSize方法
解決方法
在自定義的titleView中實(shí)現(xiàn)該方法就能恢復(fù)正常
- (CGSize)intrinsicContentSize { return UILayoutFittingExpandedSize; }
3.tableView里section之間出現(xiàn)大塊的間距
原因分析
iOS11對(duì)UITableView的內(nèi)部代碼做了些許調(diào)整
如果你不實(shí)現(xiàn)這兩個(gè)方法
-tableView: viewForFooterInSection:
-tableView: viewForHeaderInSection:
則系統(tǒng)不會(huì)再調(diào)用
-tableView: heightForHeaderInSection:
-tableView: heightForFooterInSection:
解決方法
self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 0;
4.UIScrollView里利用contentSize做的動(dòng)畫有問題
原因分析
因?yàn)樵趇OS11下UITableView默認(rèn)使用Self-Sizing
相當(dāng)于
tableView.estimatedRowHeight = UITableViewAutomaticDimension;
tableView.estimatedSectionFooterHeight = UITableViewAutomaticDimension;
tableView.estimatedSectionHeaderHeight = UITableViewAutomaticDimension;
這樣就會(huì)導(dǎo)致tableView的contentSize不是一下子全部計(jì)算出來的闲延,導(dǎo)致利用contentSize做的動(dòng)畫就會(huì)有異常
解決方法
tableView.estimatedRowHeight = 0;
tableView.estimatedSectionFooterHeight = 0;
tableView.estimatedSectionHeaderHeight = 0;