问题
之前APP内截取tableView长图在iOS 11以下的机型可以正常运行,但是iOS 11系统却只能截图当前屏幕范围内的图片,如下图所示
原因
IOS11以后,Self-Sizing默认开启,包括Headers, footers。如果项目中没使用estimatedRowHeight属性,在IOS11下会有奇奇怪怪的现象,因为IOS11之前,estimatedRowHeight默认为0,Self-Sizing自动打开后,contentSize和contentOffset都可能发生改变。可以通过设置tableView的estimatedRowHeight、estimatedSectionHeaderHeight、estimatedSectionFooterHeight属性为0来关闭Self-Sizing。
解决方法
在对应的tableView处设置如下属性,关闭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){
//第一个参数表示区域大小。第二个参数表示透明开关,如果图形完全不用透明,设置为YES以优化位图的存储.第三个参数就是屏幕密度了
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出现问题的请把tableView换成手写,试了多种方法,xib截取长图展示不全
--- 2019.11.16
有帮助请点赞