UIScrollViewのコンテンツ全体のスクリーンショットを撮る

UIViewのメソッド1発だけでは無理みたい。中身が全て見えるようにサイズ変更してから撮影する原始的な方法になります。データが非同期処理の場合は工夫が必要かも。

extension UIScrollView {
    
    func snapshot() -> UIImage? {
        let savedFrame = frame
        let savedContentOffset = contentOffset
        let savedHorizontalScroll = showsHorizontalScrollIndicator
        let savedVerticalScroll = showsVerticalScrollIndicator
        
        defer {
            // 撮影前に戻す
            frame = savedFrame
            contentOffset = savedContentOffset
            showsHorizontalScrollIndicator = savedHorizontalScroll
            showsVerticalScrollIndicator = savedVerticalScroll
        }
        
        // 撮影用に設定
        showsHorizontalScrollIndicator = false
        showsVerticalScrollIndicator = false
        contentOffset = .zero
        frame = CGRect(origin: .zero, size: contentSize)
        
        return UIGraphicsImageRenderer(size: frame.size).image { context in
            layer.render(in: context.cgContext)
        }
    }
}