在iOS 7下,如何动态隐藏和显示状态栏(无论何时我想)

Dou*_*ith 26 objective-c ios ios7

假设用户在View Controller中并且想要进入"全屏"类型模式,其中状态栏被隐藏,在iOS 6下,这是一个简单的方法调用来隐藏/显示状态栏,但无论它看起来如何在iOS 7下坚持下去.

我见过这样的解决方案:

- (BOOL)prefersStatusBarHidden {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

但是这不允许它在运行时切换.(它不接受任何论点.)

在我的info.plist中,我已经View controller-based status bar appearance设置为NO.

我的智慧结束了.我怎么隐藏它?

Joh*_*ato 74

斯威夫特4

节目:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = false
Run Code Online (Sandbox Code Playgroud)

隐藏:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = true
Run Code Online (Sandbox Code Playgroud)


Objective-C的

那么这是一种方法:

在myViewController.h中

@interface myViewController : UIViewController {
    BOOL shouldHideStatusBar;
}
Run Code Online (Sandbox Code Playgroud)

然后在myViewController.m中

- (void)viewDidLoad {
    [super viewDidLoad];
    shouldHideStatusBar = YES;
}

- (BOOL)prefersStatusBarHidden {
    return shouldHideStatusBar;
}
Run Code Online (Sandbox Code Playgroud)

让我们说当我触摸屏幕时,它应该现在显示状态栏.你需要打电话:setNeedsStatusBarAppearanceUpdate专门让这个工作,然后一个开关(在这种情况下是bool)来显示/隐藏.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    shouldHideStatusBar = (shouldHideStatusBar)? NO: YES;
    [self setNeedsStatusBarAppearanceUpdate];
}
Run Code Online (Sandbox Code Playgroud)

setNeedsStatusBarAppearanceUpdate

只要视图控制器的状态栏属性的返回值发生更改,就应该调用此方法.如果从动画块中调用它,则更改将与动画块的其余部分一起动画.

prefersStatusBarHidden:

返回值布尔值YES指定应隐藏状态栏.默认值为NO.

讨论如果更改此方法的返回值,请调用setNeedsStatusBarAppearanceUpdate方法.

要指定子视图控制器应控制首选状态栏隐藏/取消隐藏状态,请实现childViewControllerForStatusBarHidden方法.


如果您计划使用iOS 6的应用程序,也可以查看此帖子

  • 为什么在`performSelector`调用中将调用包装到`setNeedsStatusBarAppearanceUpdate`,为什么调用`prefersStatusBarHidden`? (2认同)