UIGraphicsImageRenderer 在 iOS 15 上生成奇怪的顶部填充,在 iOS 14.x 上工作正常

Pea*_*oon 0 core-graphics ios swift swiftui

当我使用 UIGraphicsImageRenderer 将 SwiftUI 视图导出到图像时,iOS 15 会生成奇怪的顶部填充。它在 iOS 14.x 上运行良好。任何人都知道为什么? 截屏

代码

Pea*_*oon 7

事实证明这是iOS 15的一个真正的问题。

我在 Twitter 上发布了同样的问题,并已通过可行的解决方案进行了回复。

您可以在此处阅读有关该问题的更多信息

解决方案就在这个要点中

为了完整起见,我将要点发布在这里,但所有功劳都归功于其作者(而不是我):

//
//  View+Snapshot.swift
//
//  Created by Vinzius on 2021-11-06.
//

import SwiftUI
import UIKit.UIImage
import UIKit.UIGraphicsImageRenderer

extension View {
    
    func snapshot() -> UIImage? {
        
        // Note: since iOS 15 it seems these two modifiers are required.
        let controller = UIHostingController(
            rootView: self.ignoresSafeArea()
                .fixedSize(horizontal: true, vertical: true)
        )
        guard let view = controller.view else { return nil }
        
        let targetSize = view.intrinsicContentSize
        if targetSize.width <= 0 || targetSize.height <= 0 { return nil }
        
        view.bounds = CGRect(origin: .zero, size: targetSize)
        view.backgroundColor = .clear

        let renderer = UIGraphicsImageRenderer(size: targetSize)
        
        return renderer.image { _ in
            view.drawHierarchy(in: controller.view.bounds, afterScreenUpdates: true)
        }
        
    }
    
}
Run Code Online (Sandbox Code Playgroud)