iOS给UITableView截长图方法一

注意:此方法需要在第一次渲染页面时调用一次,截图操作时再调用一次,防止cell服用截图缺失

- (UIImage*)snapshotScreen:(UITableView*)shotTableView{

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){

        UIGraphicsBeginImageContextWithOptions(self.tableView.contentSize, NO, [UIScreen mainScreen].scale);

    }else{

        UIGraphicsBeginImageContext(self.tableView.contentSize);

    }

    //先保存原来frame 和 偏移量

    CGPointsavedContentOffset =self.tableView.contentOffset;

    CGRectsavedFrame =self.tableView.frame;

    CGSizecontentSize =self.tableView.contentSize;

    CGRectoldBounds =self.tableView.layer.bounds;

    if(@available(iOS13, *)){

        //iOS 13 系统截屏需要改变tableview 的bounds

         [self.tableView.layersetBounds:CGRectMake(oldBounds.origin.x, oldBounds.origin.y, contentSize.width, contentSize.height+20)];

    }

    //偏移量归零

    self.tableView.contentOffset = CGPointZero;

    self.tableView.frame = CGRectMake(0, 0, self.tableView.contentSize.width, self.tableView.contentSize.height+20);

    //截图

     [self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()];

    if(@available(iOS13,*)){

        [self.tableView.layersetBounds:oldBounds];

    }

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    //还原frame 和 偏移量

//    self.tableView.contentOffset = savedContentOffset;

    self.tableView.frame= savedFrame;

    self.tableView.contentOffset= savedContentOffset;

    return image;

}

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

推荐阅读更多精彩内容