Ios 如何在调用UIImagePickerController后隐藏状态栏?

Ios 如何在调用UIImagePickerController后隐藏状态栏?,ios,swift3,uiimagepickercontroller,statusbar,Ios,Swift3,Uiimagepickercontroller,Statusbar,在iOS 10.2上调用UIImagePickerController后,我想隐藏状态栏 有几个问题的答案不适用于Swift 3.0 建议的答案如下: 扩展UINavigationController以覆盖preferStatusBarHidden,因为UIImagePickerController是UINavigationController的子类 所以我试着: extension UINavigationController{ open override var prefersS

在iOS 10.2上调用UIImagePickerController后,我想隐藏状态栏

有几个问题的答案不适用于Swift 3.0

建议的答案如下:

  • 扩展UINavigationController以覆盖preferStatusBarHidden,因为UIImagePickerController是UINavigationController的子类
所以我试着:

extension UINavigationController{
    open override var prefersStatusBarHidden: Bool{
        return true
    }
}
extension UIImagePickerController{
    open override var prefersStatusBarHidden: Bool{
        return true
    }
}
class MyImagePickerController: UIImagePickerController{
    override var prefersStatusBarHidden: Bool{
        return true
    }
}
  • 扩展UIImagePickerController以覆盖prefersStatusBarHidden
所以我试着:

extension UINavigationController{
    open override var prefersStatusBarHidden: Bool{
        return true
    }
}
extension UIImagePickerController{
    open override var prefersStatusBarHidden: Bool{
        return true
    }
}
class MyImagePickerController: UIImagePickerController{
    override var prefersStatusBarHidden: Bool{
        return true
    }
}
  • 创建并使用UIImagePicker的子类
所以我试着:

extension UINavigationController{
    open override var prefersStatusBarHidden: Bool{
        return true
    }
}
extension UIImagePickerController{
    open override var prefersStatusBarHidden: Bool{
        return true
    }
}
class MyImagePickerController: UIImagePickerController{
    override var prefersStatusBarHidden: Bool{
        return true
    }
}

上述解决方案对我都不起作用。

您正在添加
UINavigationControllerDelegate
的委托方法,如下所示

class PersonalInfoVC: UIViewController, UIImagePickerControllerDelegate , UINavigationControllerDelegate{
添加代理并隐藏其中的状态栏。

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool){
    UIApplication.shared.isStatusBarHidden = true
}

状态栏可以通过以下扩展名永久隐藏到
UIImagePickerController

extension UIImagePickerController {
    open override var childViewControllerForStatusBarHidden: UIViewController? {
        return nil
    }

    open override var prefersStatusBarHidden: Bool {
        return true
    }
}

这适用于iOS 10上的Swift 3。

当显示视图控制器UIImagePickerController时,状态栏可以隐藏和显示。Swift 4+

picker.dismiss(animated: true, completion: {
    if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
        statusBar.isHidden =  true
    }
})

picker.dismiss(animated: true, completion: {
    if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
        statusBar.isHidden =  false
    }
})

这些答案在iOS 13上对我都不起作用。在演示图像选择器之前,我必须在演示视图控制器上设置此标志:

viewController.modalPresentationCapturesStatusBarAppearance=YES;
[viewController presentViewController:picker动画:是完成:无];

UIApplication.shared.isStatusBarHidden=true已从iOS 9.0中删除。你能更新你的答案吗。