注: 本文內(nèi)容選自http://www.reibang.com/p/e97581110a59 ?僅供學習使用?
1.升級iOS11后造成的變化
1. 1升級后潮梯,發(fā)現(xiàn)某個擁有tableView的界面錯亂例书,組間距和contentInset錯亂,因為iOS11中UIViewController的automaticallyAdjustsScrollViewInsets屬性被廢棄了牲平,因此當tableView超出安全區(qū)域時,系統(tǒng)自動會調(diào)整SafeAreaInsets值域滥,進而影響adjustedContentInset值
// 有些界面以下使用代理方法來設(shè)置纵柿,發(fā)現(xiàn)并沒有生效
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
// 這樣的原理是因為之前只是實現(xiàn)了高度的代理方法蜈抓,卻沒有實現(xiàn)View的代理方法,iOS10及以前這么寫是沒問題的昂儒,iOS11開啟了行高估算機制引起的bug沟使,因此有以下幾種解決方法:
// 解決方法一:添加實現(xiàn)View的代理方法,只有實現(xiàn)下面兩個方法渊跋,方法 (CGFloat)tableView: heightForFooterInSection: 才會生效
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return nil;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return nil;
}
// 解決方法二:直接使用tableView屬性進行設(shè)置,修復該UI錯亂
self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 5;
[_optionTableView setContentInset:UIEdgeInsetsMake(-35, 0, 0, 0)];
// 解決方法三:添加以下代碼關(guān)閉估算行高
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
1.2 如果使用了Masonry 進行布局腊嗡,就要適配safeArea
if ([UIDevice currentDevice].systemVersion.floatValue >= 11.0) {
make.edges.equalTo(self.view.safeAreaInsets);
} else {
make.edges.equalTo(self.view);
}
1.3 對于IM的發(fā)送原圖功能,iOS11啟動全新的HEIC 格式的圖片刹枉,iPhone7以上設(shè)備+iOS11排出的live照片是".heic"格式圖片叽唱,同一張live格式的圖片,iOS10發(fā)送就沒問題(轉(zhuǎn)成了jpg)微宝,iOS11就不行
微信的處理方式是一比一轉(zhuǎn)化成jpg格式
QQ和釘釘?shù)奶幚矸绞绞侵苯訅嚎s棺亭,即使是原圖也壓縮為非原圖
微信的逼格太高,沒找到現(xiàn)成的方法蟋软,我采用的是QQ 的方案