我想创建一个全局函数,我可以使用它来显示和隐藏状态栏。这是我做的:
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?
答案 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”,您将无法在启动时使用它。然后,您无需在代码中执行任何操作,该栏将在您的应用启动时显示。见前面的讨论: