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

项目中有截屏功能,在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截屏内容不完整问题)