【问题标题】:iOS 13 Fullscreen UIImagePickerController?iOS 13 全屏 UIImagePickerController?
【发布时间】:2019-11-21 18:34:02
【问题描述】:

我正在更新一个支持 iOS 13 的应用程序,其中一个要求(目前)是将所有模式 UIViewControllers 转换回 UIModalPresentationStyle.fullScreen,但 UIImagePickerController 似乎不尊重该值我正在传递它,并且在我挑选照片时始终处于“卡片视图”中,而当我挑选视频时始终处于全屏状态。

有没有办法让两个 ViewController 具有相同的外观,无论是卡片还是全屏?

【问题讨论】:

  • 感谢@matt 的澄清。
  • 我很少不同意@matt,所以也许我误解了这个问题。我刚刚测试了一些东西,当 sourceType = .photoLibrarymodalPresentationStyle = .fullScreen 选择器仅限于照片并在 iOs 13 中全屏显示时。我错过了什么?
  • @dfd 嗯。在我的项目中,sourceType = .photoLibrarymodalPresentationStyle = .fullScreen 我仍然得到了卡片的外观,所以也许我是缺少某些东西的人。我会再次检查并回复您。
  • 我在使用 UIImagePickerViewController 时遇到了同样的问题,直到我意识到将 picker.presentationController?.delegate 设置为一个值会导致模态演示样式设置被忽略。当我没有设置该委托属性时,它按预期工作。

标签: ios uiviewcontroller ios13 uimodalpresentationstyle


【解决方案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)
    }
}

它做的不多,但它确实全屏显示。它是从一个更大的项目中提取的,并在运行 13.1 的 iPad Mini 和另一个运行 13.2 的 iPad Mini 上进行了测试。也在 iPhone 11 Pro 模拟器中进行了测试。

有一件事,当我将NSPhotoLibraryUsageDescription 键添加到info.plist 时,它从来没有真正弹出任何东西!?!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多