Представление UIActivityViewController из SwiftUI View - PullRequest
2 голосов
/ 08 октября 2019

Я пытаюсь представить UIActivityViewController (общий лист) из представления SwiftUI. Я создал представление под названием 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

Есть ли способ представить это так, как оно обычно представлено? Как в покрытии половины экрана?

1 Ответ

1 голос
/ 09 октября 2019

Существует 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

У меня нетвсе же проверил их все сам, поэтому я заранее извиняюсь, если это не сработало так, как вы ожидали.

В качестве альтернативы вы можете взглянуть на этот ответ , где они упоминают треть-party библиотека, которая позволит вам создавать полумодальные так, как они обычно представлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...