diff --git a/apps/ios/Shared/Views/Helpers/ShareSheet.swift b/apps/ios/Shared/Views/Helpers/ShareSheet.swift index 936c6cb3ab..13302b6170 100644 --- a/apps/ios/Shared/Views/Helpers/ShareSheet.swift +++ b/apps/ios/Shared/Views/Helpers/ShareSheet.swift @@ -20,3 +20,41 @@ func showShareSheet(items: [Any], completed: (() -> Void)? = nil) { presentedViewController.present(activityViewController, animated: true) } } + +extension View { + func shareSheet(item: Binding) -> some View { + sheet(item: item) { item in + Group { + if #available(iOS 16.0, *) { + ActivityView(item: item) + .presentationDetents([.medium, .large]) + } else { + ActivityView(item: item) + } + }.ignoresSafeArea() + } + } +} + +struct ShareItem: Identifiable { + let content: any Hashable + var id: Int { content.hashValue } +} + +private struct ActivityView: UIViewControllerRepresentable { + let item: ShareItem + + func makeUIViewController( + context: UIViewControllerRepresentableContext + ) -> UIActivityViewController { + UIActivityViewController( + activityItems: [item.content], + applicationActivities: nil + ) + } + + func updateUIViewController( + _ uiViewController: UIActivityViewController, + context: UIViewControllerRepresentableContext + ) { } +} diff --git a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift index da7848640f..27bf214b45 100644 --- a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift @@ -22,6 +22,7 @@ struct UserAddressView: View { @State private var mailViewResult: Result? = nil @State private var alert: UserAddressAlert? @State private var progressIndicator = false + @State private var shareItem: ShareItem? @FocusState private var keyboardVisible: Bool private enum UserAddressAlert: Identifiable { @@ -68,6 +69,7 @@ struct UserAddressView: View { } } } + .shareSheet(item: $shareItem) } @Namespace private var bottomID @@ -245,7 +247,7 @@ struct UserAddressView: View { private func shareQRCodeButton(_ userAddress: UserContactLink) -> some View { Button { - showShareSheet(items: [simplexChatLink(userAddress.connReqContact)]) + shareItem = ShareItem(content: simplexChatLink(userAddress.connReqContact)) } label: { settingsRow("square.and.arrow.up", color: theme.colors.secondary) { Text("Share address")