iOS scrollview截长图 解决iOS 11 tableView截长图不全 contentSize获取不准

释放双眼,带上耳机,听听看~!
错误展示.png

 

正常展示.png

问题

之前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

有帮助请点赞

人已赞赏
iOS文章

iOS UITableView汽车品牌索引

2019-12-29 22:55:25

iOS文章

iOS 11 widget展开 折叠状态错乱的解决方法

2019-12-30 3:17:41

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索