美文网首页
关于iOS 13中TableView截屏内容不完整问题

关于iOS 13中TableView截屏内容不完整问题

作者: 小书同学 | 来源:发表于2019-12-05 11:35 被阅读0次

    项目中有截屏功能,在iOS13之前,截屏的时候,可以将TableView中的内容都可以截取出来,包括在屏幕中不显示的地方。但是自从升级13后,截屏的内容不能完整显示了,只能看到当前屏幕可视区域内的内容了。
    发现问题就需要解决问题,所以查看了截屏的过程,以及中间tableview的变化。总算找到解决的方案了:

        //3、tableView内容
        CGPoint savedContentOffset = self.mainTableView.contentOffset;
        CGRect savedFrame = self.mainTableView.frame;
        CGSize contentSize = self.mainTableView.contentSize;
        CGRect oldBounds = self.mainTableView.layer.bounds;
        if(@available(iOS 13.0, *)){
            [self.mainTableView.layer setBounds:CGRectMake(oldBounds.origin.x, oldBounds.origin.y,
                                                           contentSize.width, contentSize.height)];
        }
        transY = navFrame.size.height;
        CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, transY);
        [colorLayer renderInContext:UIGraphicsGetCurrentContext()];
        self.mainTableView.contentOffset = CGPointZero;
        self.mainTableView.frame = CGRectMake(0, 0,contentSize.width, contentSize.height);
        [self.mainTableView.layer renderInContext:UIGraphicsGetCurrentContext()];
        CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, -transY);
        if(@available(iOS 13.0, *)){
            [self.mainTableView.layer setBounds:oldBounds];
        }
        //4、生成图片
        image = UIGraphicsGetImageFromCurrentImageContext();
        
        //5、恢复tableView的显示
        self.mainTableView.contentOffset = savedContentOffset;
        self.mainTableView.frame = savedFrame;
        //6、结束绘制
        UIGraphicsEndImageContext();
    

    上面只截取了关键的部分代码。可以看到主要是将tableView的layer进行修改,让其展示全部的内容。然后再将layer还原。

    相关文章

      网友评论

          本文标题:关于iOS 13中TableView截屏内容不完整问题

          本文链接:https://www.haomeiwen.com/subject/qyrdgctx.html