如何捕获完整tableView ios的屏幕截图

我有一个有30行的tableView,我在tableView的顶部也有一个View(不在tableview标题中),我想捕获屏幕的完整屏幕截图,包括View和tableview的所有行,但我只能能够捕获可见的tableview和视图行。请帮助我,并提前感谢。 这是我的代码和模拟器的屏幕截图。 注意(我不希望我的View在tableview标题中,因为当我们滚动tableview时它也会滚动,这就是修复视图的原因)

- (void)viewDidLoad { [super viewDidLoad]; _myTableView.delegate = self; _myTableView.dataSource = self; UIBarButtonItem *next = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStylePlain target:self action:@selector(nextButtonAction)]; UIBarButtonItem *screenShot = [[UIBarButtonItem alloc]initWithTitle:@"Screenshot" style:UIBarButtonItemStylePlain target:self action:@selector(screenshotButtonAction)]; self.navigationItem.leftBarButtonItem = screenShot; self.navigationItem.rightBarButtonItem = next; } -(void)nextButtonAction { NextViewController *myVc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"NextViewController"]; NSLog(@"value of image is %@",viewImage); myVc.myImage = viewImage; [self.navigationController pushViewController:myVc animated:YES]; } -(void)screenshotButtonAction { UIView *viewToRender = self.myTableView; CGPoint contentOffset = self.myTableView.contentOffset; UIGraphicsBeginImageContext(viewToRender.bounds.size); CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(ctx, 0,-contentOffset.y ); //-contentOffset.y [viewToRender.layer renderInContext:ctx]; viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 30; } - (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *myString = @"reused"; UITableViewCell *Cell = [tableView dequeueReusableCellWithIdentifier:myString]; if (Cell == nil) { Cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:myString]; } Cell.textLabel.text = [NSString stringWithFormat:@"This is Cell %ld",indexPath.row]; return Cell; } 

这是我想用完整的tableview和上面的图像截取的视图

我已经从获取UIScrollView的屏幕截图中更改了Swift 3的代码,包括屏幕外部分

 func screenshot() -> UIImage{ var image = UIImage(); UIGraphicsBeginImageContextWithOptions(self.tableView.contentSize, false, UIScreen.main.scale) // save initial values let savedContentOffset = self.tableView.contentOffset; let savedFrame = self.tableView.frame; let savedBackgroundColor = self.tableView.backgroundColor // reset offset to top left point self.tableView.contentOffset = CGPoint(x: 0, y: 0); // set frame to content size self.tableView.frame = CGRect(x: 0, y: 0, width: self.tableView.contentSize.width, height: self.tableView.contentSize.height); // remove background self.tableView.backgroundColor = UIColor.clear // make temp view with scroll view content size // a workaround for issue when image on ipad was drawn incorrectly let tempView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.contentSize.width, height: self.tableView.contentSize.height)); // save superview let tempSuperView = self.tableView.superview // remove scrollView from old superview self.tableView.removeFromSuperview() // and add to tempView tempView.addSubview(self.tableView) // render view // drawViewHierarchyInRect not working correctly tempView.layer.render(in: UIGraphicsGetCurrentContext()!) // and get image image = UIGraphicsGetImageFromCurrentImageContext()!; // and return everything back tempView.subviews[0].removeFromSuperview() tempSuperView?.addSubview(self.tableView) // restore saved settings self.tableView.contentOffset = savedContentOffset; self.tableView.frame = savedFrame; self.tableView.backgroundColor = savedBackgroundColor UIGraphicsEndImageContext(); return image }