从SwiftUI视图呈现UIActivityViewController

问题描述 投票:0回答:1

我正在尝试从SwiftUI视图中显示UIActivityViewController(共享表)。我创建了一个与ShareSheet一致的名为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")!])
}

screenshot of failed controller presentation

有没有办法像平常一样呈现它?如覆盖一半的屏幕?

ios swiftui
1个回答
0
投票

[UIModalPresentationStyle可用于显示某些演示文稿:

case pageSheet

一种表示样式,部分覆盖了基础内容。

您应用演示样式的方式:

func makeUIViewController(context: UIViewControllerRepresentableContext<ActivityView>) -> UIActivityViewController {
    let v = UIActivityViewController(activityItems: sharing, applicationActivities: nil)
    v.modalPresentationStyle = .pageSheet
    return v
}

演示列表可在此处找到:

https://developer.apple.com/documentation/uikit/uimodalpresentationstyle

我还没有自己对它们进行测试,所以如果这没有像您预期的那样奏效,我会提前道歉。

或者,您可以在this answer上看到他们提到的第三方库,该库可让您以通常显示的方式创建半模态。

© www.soinside.com 2019 - 2024. All rights reserved.