从全局函数中显示和隐藏StatusBar?

时间:2015-04-23 13:45:04

标签: ios objective-c swift

我想创建一个全局函数,我可以使用它来显示和隐藏状态栏。这是我做的:

Helper.hide()

以下是它的调用方式:

info.plist

我把这些函数放在一个帮助器类中。调用hide()函数不会隐藏状态栏。

我也设置了-- Could NOT find Jasper (missing: JASPER_LIBRARIES JASPER_INCLUDE_DIR) -- checking for module 'gstreamer-video-1.0' -- package 'gstreamer-video-1.0' not found -- checking for module 'gstreamer-app-1.0' -- package 'gstreamer-app-1.0' not found -- checking for module 'gstreamer-riff-1.0' -- package 'gstreamer-riff-1.0' not found -- checking for module 'gstreamer-pbutils-1.0' -- package 'gstreamer-pbutils-1.0' not found -- checking for module 'gstreamer-base-0.10' -- package 'gstreamer-base-0.10' not found -- checking for module 'gstreamer-video-0.10' -- package 'gstreamer-video-0.10' not found -- checking for module 'gstreamer-app-0.10' -- package 'gstreamer-app-0.10' not found -- checking for module 'gstreamer-riff-0.10' -- package 'gstreamer-riff-0.10' not found -- checking for module 'gstreamer-pbutils-0.10' -- package 'gstreamer-pbutils-0.10' not found -- Looking for linux/videodev.h -- Looking for linux/videodev.h - not found -- Looking for linux/videodev2.h -- Looking for linux/videodev2.h - found -- Looking for sys/videoio.h -- Looking for sys/videoio.h - not found -- Looking for libavformat/avformat.h -- Looking for libavformat/avformat.h - found -- Looking for ffmpeg/avformat.h -- Looking for ffmpeg/avformat.h - not found 状态栏最初是隐藏的

如何从全局函数中显示和隐藏StatusBar?

3 个答案:

答案 0 :(得分:3)

在名为UIViewController的{​​{1}}上创建一个静态布尔属性。

isStatusBarHidden

在所需的视图控制器中,您只需覆盖prefersStatusBarHidden属性

extension UIViewController {
    static var isStatusBarHidden = false
}

然后您需要做的就是根据需要将var设置为true或false:

class ViewController: UIViewController {
    // ..
    override var prefersStatusBarHidden: Bool {
        return UIViewController.isStatusBarHidden
    }
    // ..
}

要打开/关闭覆盖该属性的视图控制器的状态栏:

UIViewController.isStatusBarHidden = true

不要忘记调用setNeedsStatusBarAppearanceUpdate

UIViewController.isStatusBarHidden = !UIApplication.shared.isStatusBarHidden

答案 1 :(得分:2)

appDelegate中的setStatusBarStyle不会转发到视图控制器。他们控制自己的状态。所以试试这个:

创建一个从UIViewController派生的baseViewController类,它实现了hide和show的功能。然后从baseViewController类派生您正在使用的视图控制器。

class baseViewController : UIViewController {

    var statusBarHidden : Bool = true

    func show()
    {
        self.statusBarHidden = false
        setNeedsStatusBarAppearanceUpdate()
    }

    func hide()
    {
        self.statusBarHidden = true
        setNeedsStatusBarAppearanceUpdate()
    }

    override func prefersStatusBarHidden() -> Bool {
        return self.statusBarHidden
    }
}

class derivedViewController: baseViewController {
    override func viewDidLoad() {
        hide() // run this to hide the status bar
        show() // run this to show the status bar
    }
}

答案 2 :(得分:0)

在隐藏功能中,app变量未知。当我运行你的例子时,我不得不改为:

func hide() {
    let app = UIApplication.sharedApplication()
    if !app.statusBarHidden {
        app.statusBarHidden = true
    }
}
func show() {
    let app = UIApplication.sharedApplication()
    if app.statusBarHidden {
        app.statusBarHidden = false
    }
}

如果这不适用于全局函数,您可以尝试将其添加到ViewControllers:

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

另请注意,在info.plist文件中,有一个名为“状态栏最初隐藏”的设置。将其设置为“YES”,您将无法在启动时使用它。然后,您无需在代码中执行任何操作,该栏将在您的应用启动时显示。见前面的讨论:

How to set status bar hidden for entire app in iOS?