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

有帮助请点赞

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近 升级Xcode 9 + iOS 11后,发现原本没问题的tableView出现了好多异常。 一、头部刷新UI...
    我的咯嗨阅读 13,757评论 10 19
  • 本文为作者原创,未经作者允许不得转载。该文同时发表在腾讯bugly公众号:https://mp.weixin.qq...
    sonialiu阅读 101,722评论 74 283
  • iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆、动态的新风格。 本文介绍iOS11中在UI方面做了哪...
    阿凡提说AI阅读 3,663评论 0 1
  • 前言 苹果WWDC开发者大会上,终于发布了大家期待已久的iOS 11,有些新特性功能确实出人意料。不过大的方面苹果...
    Mr_Say_Yes阅读 8,606评论 6 15
  • 东头跛脚的杜叔,仍在修鞋,应该是初中开始,他就在巷口修鞋,巷口外便是繁华的步行街,离学校也就几个街口,我经常在换季...
    西诗人生阅读 3,184评论 0 1