首页 > 解决方案 > 用于截取整个 UITableView 的代码在 iOS 13 中不再起作用

问题描述

我多年来一直使用下面的代码来捕获 UITableView 的屏幕截图(包括隐藏的行)并将其保存到用户的手机图库或共享它。

由于他们更新到 iOS 13,它不再工作,它只捕获表格的可见部分,将其底部留空。

-(UIImage *)imageFromCurrentTable
{
    CGRect frame = self.tableView.frame;
    frame.size.height = self.tableView.contentSize.height;
    self.tableView.frame = frame;
        UIGraphicsBeginImageContext(self.tableView.bounds.size);
    [self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    
    NSData * data = UIImagePNGRepresentation(image);
    return [UIImage imageWithData:data];
}

iOS 13 发生了什么变化?如何更新此代码?(代码是 Obj-C 但我也会接受快速的答案!)

标签: objective-cuitableviewios13uigraphicscontext

解决方案


我遇到过这个问题。由于细胞重用,UIGraphicsGetImageFromCurrentImageContext不能产生完整UITableView的结构。

一种方式[非有效方式]:

  • cellForRowAtIndexPath中,我们可以得到哪个UITableViewCell使用。将该单元格存储在[Int: UITableViewCell].
  • 从 获取屏幕截图UITableViewCell.contentView
  • 将该屏幕截图的图像作为子视图UIView一一添加。
  • 现在,UIView拥有UITableView's contentViewas Images
  • 从 获取屏幕截图UIView

推荐阅读