I think everyone forgets that UITableView is a UIScrollView . No need to calculate cells, height, etc. You can simply create your context using contentSize , set tableView.frame.size = tableView.contentSize and render in context.
See this example.
UIGraphicsBeginImageContext(tableView.contentSize) let context = UIGraphicsGetCurrentContext() let cachedOffset = CGPoint(x:tableView.contentOffset.x , y:tableView.contentOffset.y) let cachedFrame = tableView.frame tableView.contentOffset = .zero tableView.frame = CGRect(x: 0, y: 0, width: tableView.contentSize.width, height: tableView.contentSize.height) tableView.layer.render(in: context) tableView.frame = cachedFrame tableView.contentOffset = cachedOffset if let image = UIGraphicsGetImageFromCurrentImageContext() { let imageView = UIImageView(image: image) self.createPDF(fromUIViews:myImage saveToDocumentsWithFileName:"PDF Name") } UIGraphicsEndImageContext()
source share