关于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还原。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值