gpt4 book ai didi

SwiftUI - CNContactViewController NavigationBar 问题

转载 作者:行者123 更新时间:2023-12-05 03:54:46 24 4
gpt4 key购买 nike

我正在尝试实现 CNContactViewDelegate 以便能够显示 CNContact 的详细信息。显然,我是第一个使用 SwiftUI 实现它并遇到问题的人。无论如何,我可以通过使用 UIViewControllerRepresentable 查看 CNContact 的详细信息,但我对 NavigationBar 有疑问, 之间存在间隙>Contact 的图像和 StatusBar - 因为 NavigationBarNavigationLink 我认为 - 这个差距不存在 native Contacts 应用程序,显然在这个 link 中在 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) 都不起作用。这里的问题示例是 native 应用程序的屏幕截图;

enter image description here

这是我的代码的结果;

enter image description here

最佳答案

发表了我对解决方案的评论,然后我想到了将联系人 View Controller 包装在我的自定义 NavigationController 中的想法。瞧,修好了!

struct ContactView: UIViewControllerRepresentable {

var contact: CNContact

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

func makeUIViewController(context: UIViewControllerRepresentableContext<ContactView>) -> NavigationController {
let controller = CNContactViewController(forUnknownContact: contact)
controller.contactStore = CNContactStore()
controller.delegate = context.coordinator
let navigationController = NavigationController(rootViewController: controller)
return navigationController
}

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

class Coordinator: NSObject, CNContactViewControllerDelegate {

var parent: ContactView

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

func contactViewController(_ viewController: CNContactViewController,
didCompleteWith contact: CNContact?) {
}

func contactViewController(_ viewController: CNContactViewController,
shouldPerformDefaultActionFor property: CNContactProperty) -> Bool {
return true
}
}
}

关于SwiftUI - CNContactViewController NavigationBar 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60748395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com