0

Я представляю UIImagePickerController, чтобы сделать снимок, проблема в том, что если я сделаю снимок или отменил UIImagePickerController, я вернусь на белый экран, а не на предыдущие ViewController. Только мой navigation bar все еще здесь. Если я нахожусь на другом view (с навигационной панелью), все в порядке, и если я вернусь на вкладке, где UIImagePickerController называется еще белым.белый экран после подарка UIImagePickerController

let picker = UIImagePickerController(); 
picker.delegate = self; 
picker.mediaTypes = [swiftString]; 
picker.allowsEditing = true 

picker.sourceType = UIImagePickerControllerSourceType.camera; 
picker.cameraCaptureMode = .photo 
self.present(picker, animated:true, completion:nil); 

уволить:

picker.dismiss(animated: true, completion:nil); 

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
    picker.dismiss(animated: true, completion:nil); 
} 

Если кто-то есть идея благодарственное в!

Update:

белый экран появляется всегда, когда я называю вид с present method. Поэтому я считаю, что конфликт с навигационным контроллером (иерархии ...)

Это решить мою проблему:

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return} 
appDelegate.navigationController.present(picker, animated: true, completion: nil) 

Если кто-то есть другая альтернатива решить эту проблему!

+0

Как отпускаешь 'UIImagePickerController'? – Poles

+0

@ Поля Конечно, сообщение отредактировано, чтобы показать его – Makaille

+0

Вы уверены, что сделали свой класс подклассом UINavigationControllerDelegate, который требуется сборщику изображений? – pbush25

ответ

0

Используйте picker.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext перед представлением imagepicker.

+0

Это делает мой взгляд полностью, каждая кнопка не работает, и сборщик не представлен. – Makaille

+0

Хорошо. Используйте 'imagePicker.parent? .dismiss (animated: true, completion: no)' при отклонении imagepicker. – Poles

+0

Проблема не в сборщике, я исследовал приложение и всегда использую данный метод.Это похоже на конфликт между настоящим и навигационным контроллером. – Makaille

0

Вот код, я использую для камеры:

func openCameraApp() { 
    if UIImagePickerController.availableCaptureModes(for: .rear) != nil { 
     picker.allowsEditing = false 
     picker.sourceType = UIImagePickerControllerSourceType.camera 
     picker.cameraCaptureMode = .photo 
     picker.modalPresentationStyle = .fullScreen 
     present(picker, 
       animated: true, 
       completion: nil) 
    } else { 
     noCamera() 
    } 
} 
func noCamera(){ 
    let alertVC = UIAlertController(
     title: "No Camera", 
     message: "Sorry, this device has no camera", 
     preferredStyle: .alert) 
    let okAction = UIAlertAction(
     title: "OK", 
     style:.default, 
     handler: nil) 
    alertVC.addAction(okAction) 
    present(
     alertVC, 
     animated: true, 
     completion: nil) 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage // do you have this line in your code? 
    image = chosenImage 
    self.performSegue(withIdentifier: "ShowEditView", sender: self) 
    dismiss(animated: true, completion: nil) 
} 
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
    dismiss(animated: false, completion: nil) 
} 

Я заметил несколько вещей разных.

  • Вы установили .allowsEditing в true. Я не верю, что это имеет значение.
  • Я проверяю камеру, но вы, вероятно, не поставили этот код в свой вопрос.
  • Я устанавливаю .modalPresentationStyle на полный экран. Это может быть вашей проблемой.
  • Я не вижу звонок imagePickerController(picker: didFinishPickingMediaWithInfo). Но поскольку он не должен строиться, это определенно не проблема.
  • Внутри этого звонка я разворачиваю изображение с info. Я считаю, что это ваша проблема. Я поместил комментарий на эту конкретную строку, попросив вас проверить это.
  • И наконец, я выполняю segue для другого контроллера вида. (Мое приложение в основном «выбрать», а затем «редактировать».)
+0

. Привет, спасибо за вашу помощь, но ничего не изменит. я буду обновлять сообщение, проблема возникает из метода вызова с помощью моего навигационного контроллера – Makaille

0

Установите .modalPresentationStyle полноэкранный

+0

, который уже предложен, не работает – Makaille