Отображать CNContactPickerViewController в представлении контейнера?

В настоящее время я обновляю старый проект Xcode, над которым я начал работать давным-давно. Я обновил цель развертывания до iOS 10.0, поэтому меня заставили заменить ABAddressBook рамки с Contacts фреймворк. Я использовал, чтобы представить ABPeoplePickerNavigationController внутри Контейнерного Представления, которое было подпредставлением корневого контроллера представления UINavigationController, Таким образом, я смог представить интерфейс People Picker внутри контроллера навигации, который находился внутри контроллера панели вкладок (что означало, что панель навигации вверху и панель вкладок внизу все еще отображались вокруг интерфейса выбора людей). Я делал это с этим кодом (называется в viewWillAppear корневого контроллера контроллера навигации:

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)

Единственное существенное различие между этими двумя кодами состоит в том, что я не удаляю панель навигации из контроллера представления (потому что у него нет такового). Кроме того, я оставил все почти одинаково. Я предполагаю, что мне нужно изменить несколько других вещей, чтобы сделать эту работу, так как есть разница между добавлением контроллера навигации в представление контейнера и добавлением контроллера представления. Кто-нибудь может мне помочь и дать несколько советов, как этого добиться? Спасибо!

1 ответ

Используйте этот код для отображения contactPickerViewController внутри tabBar

let contactPickerViewController:CNContactPickerViewController = CNContactPickerViewController()
contactPickerViewController.modalPresentationStyle = .overCurrentContext
self.presentViewController(contactPicker, animated: false, completion: nil)
Другие вопросы по тегам