2

我正在更新一个很久以前开始工作的旧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是有区别的。任何人都可以帮助我,并给我一些关于如何实现这一目标的提示?谢谢!

回答

3

使用该代码来显示contactPickerViewController内部的TabBar

let contactPickerViewController:CNContactPickerViewController = CNContactPickerViewController() 
contactPickerViewController.modalPresentationStyle = .overCurrentContext 
self.presentViewController(contactPicker, animated: false, completion: nil)