
錯誤展示.png

正常展示.png
問題
之前APP內(nèi)截取tableView長圖在iOS 11以下的機型可以正常運行,但是iOS 11系統(tǒng)卻只能截圖當(dāng)前屏幕范圍內(nèi)的圖片,如下圖所示
原因
IOS11以后,Self-Sizing默認(rèn)開啟,包括Headers, footers。如果項目中沒使用estimatedRowHeight屬性,在IOS11下會有奇奇怪怪的現(xiàn)象,因為IOS11之前,estimatedRowHeight默認(rèn)為0,Self-Sizing自動打開后,contentSize和contentOffset都可能發(fā)生改變??梢酝ㄟ^設(shè)置tableView的estimatedRowHeight、estimatedSectionHeaderHeight、estimatedSectionFooterHeight屬性為0來關(guān)閉Self-Sizing。
解決方法
在對應(yīng)的tableView處設(shè)置如下屬性,關(guān)閉Self-Sizing。
_tableView.estimatedRowHeight = 0;
_tableView.estimatedSectionHeaderHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;
很多童鞋反饋目前iOS11之后還有問題,放出截圖方法
- (UIImage *)captureScrollView:(UIScrollView *)scrollView{
CGRect savedFrame = scrollView.frame;
CGSize size = CGSizeMake(scrollView.contentSize.width, scrollView.contentSize.height);
if(&UIGraphicsBeginImageContextWithOptions != NULL){
//第一個參數(shù)表示區(qū)域大小。第二個參數(shù)表示透明開關(guān),如果圖形完全不用透明,設(shè)置為YES以優(yōu)化位圖的存儲.第三個參數(shù)就是屏幕密度了
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
}else{
UIGraphicsBeginImageContext(size);
}
scrollView.contentOffset = CGPointZero;
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
//iOS7 提供的截屏新方法,可以不在主線程做
[scrollView drawViewHierarchyInRect:CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height) afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
scrollView.frame = savedFrame;
if(image != nil){
return image;
}
return nil;
}
xib出現(xiàn)問題的請把tableView換成手寫,試了多種方法,xib截取長圖展示不全
--- 2019.11.16
有幫助請點贊