项目中有截屏功能,在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还原。
网友评论