首页 > 解决方案 > 从 SwiftUI 视图呈现 UIActivityViewController

问题描述

我正在尝试UIActivityViewController从 SwiftUI 视图中呈现(共享表)。我创建了一个名为ShareSheetconformed to的视图UIViewControllerRepresentable来配置UIActivityViewController,但实际呈现它并不是那么简单。

struct ShareSheet: UIViewControllerRepresentable {
    typealias UIViewControllerType = UIActivityViewController

    var sharing: [Any]

    func makeUIViewController(context: UIViewControllerRepresentableContext<ShareSheet>) -> UIActivityViewController {
        UIActivityViewController(activityItems: sharing, applicationActivities: nil)
    }

    func updateUIViewController(_ uiViewController: UIActivityViewController, context: UIViewControllerRepresentableContext<ShareSheet>) {

    }
}

天真地这样做.sheet会导致以下结果。

.sheet(isPresented: $showShareSheet) {
    ShareSheet(sharing: [URL(string: "https://example.com")!])
}

控制器演示失败的屏幕截图

有没有办法像通常呈现的那样呈现这个?就像覆盖一半屏幕一样?

标签: iosswiftswiftuiuiactivityviewcontroller

解决方案


希望对你有帮助,

struct ShareSheetView: View {
    var body: some View {
        Button(action: actionSheet) {
            Image(systemName: "square.and.arrow.up")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .frame(width: 36, height: 36)
        }
    }
    
    func actionSheet() {
        guard let data = URL(string: "https://www.apple.com") else { return }
        let av = UIActivityViewController(activityItems: [data], applicationActivities: nil)
        UIApplication.shared.windows.first?.rootViewController?.present(av, animated: true, completion: nil)
    }
}

在此处输入图像描述


推荐阅读