Поделиться положением экрана меню на Mac(Catalyst)

#swift #xcode #ipad #swiftui #mac-catalyst

Вопрос:

Я создал кнопку общего доступа, подобную этой:

 struct ShareButton<Content: View>: View {
    var items: [Any]
    var content: () -> Content
    
    var body: some View {
        Button {
            let avc = UIActivityViewController(activityItems: items, applicationActivities: [])
            avc.popoverPresentationController?.sourceView = UIHostingController(rootView: self).view
            UIApplication.shared.windows.filter({$0.isKeyWindow}).first?.rootViewController?.present(avc, animated: false)
        } label: {
            content()
        }
    }
}
 

это можно использовать следующим образом:

     ShareButton(items: [someURL]){
        Label("share", systemImage:"square.and.arrow.up")
    }
 

Однако на Mac(Catalyst) и iPad всплывающее меню «Общий доступ» появляется не в том месте.
Похоже, что UIHostingController(rootView: self).view возвращает неправильное представление ссылки. Кто-нибудь знает, как это исправить?

Комментарии:

1. Вы используете кнопку «Поделиться» на панели инструментов() или в представлении? Если это просто представление, я думаю, что код, который у вас есть, должен работать. Если это на панели инструментов, значит, у вас проблема. Это лучшее решение, которое я знаю: pspdfkit.com/blog/2020/popovers-from-swiftui-uibarbutton