SwiftUI - проблема CNContactViewController с навигационной панелью - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь реализовать CNContactViewDelegate, чтобы иметь возможность показать детали CNContact. И, видимо, я первый, кто реализовал это с SwiftUI и получил проблемы. В любом случае, я могу видеть детали CNContact с использованием UIViewControllerRepresentable, но у меня есть проблема с NavigationBar, в которой существует разрыв между изображением Contact и StatusBar из-за NavigationBar и NavigationLink Я думаю - и этот пробел отсутствует в собственном приложении Contacts и, по-видимому, в этой ссылке , которая реализовала структуру в UIKit.

Вот код;

struct ContactsListView: View {
    @ObservedObject var contactsModel: ContactsViewModel
    var body: some View {
        NavigationView{
            List {
                //After some ForEach's and Section's
                //This view is working. 
                NavigationLink(destination: ContactDetailView(contact: self.$contactsModel.contacts[sectionIdx].contacts[contactIdx])) {
                    Text(self.contactsModel.contacts[sectionIdx].contacts[contactIdx].givenName)
                }
            }
            .navigationBarTitle("Contacts")
        }
    }
}


struct ContactView: UIViewControllerRepresentable {

    @Binding var contact: CNContact

    func makeCoordinator() -> ContactView.Coordinator {
        Coordinator(self)
    }

    func makeUIViewController(context: UIViewControllerRepresentableContext<ContactView>) -> CNContactViewController {
        let controller = CNContactViewController(for: contact)
        self.navigationBarHidden(true)
        return controller
    }

    func updateUIViewController(_ uiViewController: CNContactViewController, context: UIViewControllerRepresentableContext<ContactView>) {
        print(context)
    }

    class Coordinator: NSObject, CNContactViewControllerDelegate {

        var parent: ContactView

        init(_ contactDetail: ContactView) {
            self.parent = contactDetail
            self.parent.navigationBarHidden(true)

        }
    }
}

В ContactView оба эти self.navigationBarHidden(true) не работают. В качестве примера проблемы приведен скриншот нативного приложения:

enter image description here

И вот результат моего кода;

enter image description here

...