iOS 13 полноэкранный UIImagePickerController?

Я обновляю приложение для поддержки iOS 13, и одно из требований (на данный момент) - преобразовать все модальные UIViewControllers обратно в UIModalPresentationStyle.fullScreen, но UIImagePickerController, похоже, не уважает значение, которое я ему передаю, и всегда находится в "Карточка", когда я выбираю фото, и полноэкранный режим, когда я выбираю видео.

Есть ли способ сделать так, чтобы оба ViewController имели одинаковый внешний вид в виде карточек или в полноэкранном режиме?


person Lucas P.    schedule 21.11.2019    source источник
comment
Спасибо @matt за разъяснения.   -  person Lucas P.    schedule 21.11.2019
comment
Я редко не согласен с @matt, так что, возможно, я неправильно понимаю вопрос. Я только что протестировал вещи, и когда sourceType = .photoLibrary и modalPresentationStyle = .fullScreen средство выбора ограничено фотографиями и отображается в полноэкранном режиме в iOS 13. Что мне не хватает?   -  person dfd    schedule 21.11.2019
comment
@dfd Хммм. В моем проекте sourceType = .photoLibrary и modalPresentationStyle = .fullScreen, и я все еще получаю внешний вид карты, так что, возможно, я тот, кому что-то не хватает. Я проверю еще раз и отвечу вам.   -  person Lucas P.    schedule 22.11.2019
comment
У меня была такая же проблема с UIImagePickerViewController, пока я не понял, что установка picker.presentationController?.delegate в значение приведет к игнорированию настройки стиля модального представления. Это сработало, как ожидалось, когда я не установил это свойство делегата.   -  person William Chen    schedule 04.02.2020


Ответы (1)


Не смотрите на это как на ответ, просто помогите. Вот мой рабочий код, написанный в Xcode 11.2 для iOS 13.0:

class ViewController: UIViewController {

    let imagePicker = UIImagePickerController()
    var btnOpenImage = UIButton()

    override func viewDidLoad() {
        super.viewDidLoad()

        btnOpenImage.translatesAutoresizingMaskIntoConstraints = false
        btnOpenImage.backgroundColor = UIColor.red
        btnOpenImage.setTitle("Show Picker", for: .normal)
        btnOpenImage.addTarget(self, action: #selector(showImagePicker), for: .touchUpInside)
        view.addSubview(btnOpenImage)

        btnOpenImage.widthAnchor.constraint(equalToConstant: 180).isActive = true
        btnOpenImage.heightAnchor.constraint(equalToConstant: 80).isActive = true
        btnOpenImage.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        btnOpenImage.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    }
}
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    @objc func showImagePicker() {
        imagePicker.allowsEditing = false
        imagePicker.sourceType = .photoLibrary
        imagePicker.modalPresentationStyle = .fullScreen
        present(imagePicker,
                animated: true,
                completion: nil)
    }
    @objc internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        dismiss(animated: true, completion: nil)
    }
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: false, completion: nil)
    }
}

Он мало что делает, но действительно показывает все в полноэкранном режиме. Он был взят из гораздо более крупного проекта и протестирован на iPad Mini под управлением 13.1 и другом под управлением 13.2. Также протестирован в симуляторе iPhone 11 Pro.

Во-первых, хотя я добавил ключ NSPhotoLibraryUsageDescription в info.plist, он никогда на самом деле ничего не выскакивал!?!

person dfd    schedule 23.11.2019