我正在尝试从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")!])
}
有没有办法像平常一样呈现它?如覆盖一半的屏幕?
[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上看到他们提到的第三方库,该库可让您以通常显示的方式创建半模态。