【问题标题】:How to hide status bar after calling UIImagePickerController?调用 UIImagePickerController 后如何隐藏状态栏?
【发布时间】:2017-01-04 04:35:27
【问题描述】:

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

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

建议的答案是:

  • 扩展 UINavigationController 以覆盖 preferStatusBarHidden,因为 UIImagePickerController 是 UINavigationController 的子类。

所以我尝试了:

extension UINavigationController{
    open override var prefersStatusBarHidden: Bool{
        return true
    }
}
  • 扩展 UIImagePickerController 以覆盖 prefersStatusBarHidden。

所以我尝试了:

extension UIImagePickerController{
    open override var prefersStatusBarHidden: Bool{
        return true
    }
}
  • 创建和使用 UIImagePicker 的子类

所以我尝试了:

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

以上解决方案都不适合我。

【问题讨论】:

    标签: ios swift3 uiimagepickercontroller statusbar


    【解决方案1】:

    状态栏可以永久隐藏,扩展名为UIImagePickerController

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

    这适用于 iOS 10 上的 Swift 3。

    【讨论】:

      【解决方案2】:

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

      class PersonalInfoVC: UIViewController, UIImagePickerControllerDelegate , UINavigationControllerDelegate{
      

      添加代理并在其中隐藏状态栏。

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

      【讨论】:

      • UIApplication.shared.isStatusBarHidden = true 已从 iOS 9.0 中删除。你能更新你的答案吗?
      【解决方案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
          }
      })
      

      【讨论】:

        【解决方案4】:

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

        viewController.modalPresentationCapturesStatusBarAppearance = YES; [viewController presentViewController:picker animated:YES completion:nil];

        【讨论】:

          猜你喜欢
          • 2015-04-21
          • 1970-01-01
          • 2014-11-14
          • 2016-02-15
          • 1970-01-01
          • 2017-03-12
          • 1970-01-01
          • 2015-09-17
          • 2013-09-29
          相关资源
          最近更新 更多