我正在更新一个很久以前开始工作的旧Xcode项目。我将部署目标更新为iOS 10.0,因此我不得不用Contacts
框架替换ABAddressBook
框架。我曾经在容器视图中呈现ABPeoplePickerNavigationController
,这是UINavigationController
的根视图控制器的子视图。这样我就能够在导航控制器中呈现People Picker UI,该导航控制器位于标签栏控制器内部(这意味着顶部的导航栏和底部的标签栏仍显示在人员选择器UI周围)。我用这个代码(称为viewWillAppear
导航控制器的根视图控制器的做到这一点:在容器视图中显示CNContactPickerViewController?
let peoplePickerNavController:ABPeoplePickerNavigationController = ABPeoplePickerNavigationController()
self.addChildViewController(peoplePickerNavController)
peoplePickerNavController.didMove(toParentViewController: self)
peoplePickerNavController.navigationBar.removeFromSuperview()
peoplePickerNavController.view.frame = self.peoplePickerContainerView.bounds
peoplePickerNavController.view.translatesAutoresizingMaskIntoConstraints = true
peoplePickerNavController.peoplePickerDelegate = self
self.peoplePickerContainerView.addSubview(peoplePickerNavController.view)
有了这个代码,它仍然会在顶部导航控制器的导航栏完全显示地址簿和我试图用CNContactPickerViewController
做同样的事情,但是我遇到了这个问题,当我做同样的事情时,我使用了导航控制器,它不会给我任何错误,但视图控制器不会被显示,即使我将视图控制器的view
添加到我的容器视图中,它只是显示一个空的白色视图。现在使用:
let contactPickerViewController:CNContactPickerViewController = CNContactPickerViewController()
self.addChildViewController(contactPickerViewController)
contactPickerViewController.didMove(toParentViewController: self)
contactPickerViewController.view.frame = self.contactPickerContainerView.bounds
contactPickerViewController.view.translatesAutoresizingMaskIntoConstraints = true
contactPickerViewController.delegate = self
self.contactPickerContainerView.addSubview(contactPickerViewController.view)
这两个代码之间唯一明显的区别是,我没有从视图控制器中删除导航栏(因为它没有)。除此之外,我把所有东西都放在了一起。我猜我需要更改其他一些东西才能完成这项工作,因为将导航控制器添加到Container视图并添加View Controller是有区别的。任何人都可以帮助我,并给我一些关于如何实现这一目标的提示?谢谢!