【问题标题】:Hide status bar even when an alert is presented即使出现警报也隐藏状态栏
【发布时间】:2017-02-04 16:45:43
【问题描述】:

我正在使用

将状态栏隐藏在特定的 viewController
override func prefersStatusBarHidden() -> Bool {
    return true
}

在我在屏幕上显示警报之前,它工作得非常好。当警报出现时,状态栏再次出现,这是我不想要的。解除警报时,状态栏再次隐藏。

【问题讨论】:

  • 你的 alets 用什么? UIAlertViewUIAlertController?
  • 我正在使用 UiAlertController
  • 请检查 github 链接以测试样本..

标签: ios swift statusbar uialertcontroller


【解决方案1】:

由于UIAlertController 现在是成熟的UIViewController,您应该能够将其子类化并将相同的方法添加到新的子类中。然后实例化您的子类,而不是简单的 UIAlertController

未经测试,但这应该可以解决问题。

【讨论】:

    【解决方案2】:

    这不是最漂亮的解决方案,但由于 UIAlertController 现在只是 UIViewController 的子类,您可以将其子类化并覆盖 prefersStatusBarHidden,就像您对其他视图控制器所做的那样。

    其他一切都保持不变。

    Swift3:

    final class MYAlertController : UIAlertController {
        override var prefersStatusBarHidden: Bool {
            get {
                return true
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      创建一个名为 CustomAlertController 的类并从 UIAlertController 继承它

      在这个类中写这个方法

      override func prefersStatusBarHidden() -> Bool {
      return true
      }
      

      每当您创建警报时,请创建一个 CustomAlertController 实例,然后使用它。

      【讨论】:

        【解决方案4】:

        swift 2 版本

        override func prefersStatusBarHidden() -> Bool {
            return true
        }
        

        swift 3 版本

        override var prefersStatusBarHidden: Bool {
            return true
        }
        

        显示警报:

        let alertController = UIAlertController(title: "Error", message: "No internet connection", preferredStyle: .alert)
        
                let OKAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction) in
                    print("OK button pressed");
                }
        
                alertController.addAction(OKAction)
                self.present(alertController, animated: true, completion:nil)
        
            }
        

        请查看此链接进行测试:

        https://github.com/k-sathireddy/AlertControllerSample

        【讨论】:

        • 我已经提到我在我的 viewController 中使用了这个方法。你给我同样的方法没有解释?
        • 我应该添加一个链接来测试示例项目吗?
        【解决方案5】:

        只写一个扩展,不要创建新类。

        斯威夫特 4

        extension UIAlertController {
            open override var prefersStatusBarHidden: Bool {
                return true
            }
        }
        

        【讨论】:

          【解决方案6】:

          modalPresentationCapturesStatusBarAppearance 设置为 false。尝试将其设置为 true 以表示您正在尝试创建的 UIAlertController

          【讨论】:

          • 即使设置 modalPresentationCapturesStatusBarAppearance 为 true 状态栏仍然出现!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-29
          • 1970-01-01
          • 2016-10-21
          • 1970-01-01
          相关资源
          最近更新 更多