ann*_*nna 13 objective-c statusbar ios7
我想要点击状态栏的可见性,就像在照片应用中一样.
在iOS 7之前,此代码运行良好:
-(void)setStatusBarIsHidden:(BOOL)statusBarIsHidden {
_statusBarIsHidden = statusBarIsHidden;
if (statusBarIsHidden == YES) {
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
}else{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法让它在iOS 7中运行.我发现的所有答案都只提供永久隐藏栏但不切换的建议.
然而,自照片以来必须有一种方法.
fol*_*ben 44
默认情况下,在iOS 7或更高版本上,要隐藏特定视图控制器的状态栏,请执行以下操作:
modalPresentationStyle不UIModalPresentationFullScreen,手动设置modalPresentationCapturesStatusBarAppearance来YES呈现之前所提出的控制器(例如,-presentViewController:animated:completion或者-prepareForSegue:如果你使用故事板)-prefersStatusBarHidden在呈现的控制器中覆盖并返回适当的值setNeedsStatusBarAppearanceUpdate给提出的控制器如果要为其外观或消失设置动画,请在动画块中执行第三步:
[UIView animateWithDuration:0.33 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
}];
Run Code Online (Sandbox Code Playgroud)
您还可以通过UIStatusBarAnimation从-preferredStatusBarUpdateAnimation显示的控制器中返回适当的值来设置动画样式.
首先View controller-based status bar appearance在Info.plist中设置为YES
此Swift示例显示了在按下按钮后如何使用动画切换StatusBar.
import UIKit
class ToggleStatusBarViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func prefersStatusBarHidden() -> Bool {
return !UIApplication.sharedApplication().statusBarHidden
}
override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation {
return UIStatusBarAnimation.Slide
}
@IBAction func toggleStatusBar(sender: UIButton) {
UIView.animateWithDuration(0.5,
animations: {
self.setNeedsStatusBarAppearanceUpdate()
})
}
}
Run Code Online (Sandbox Code Playgroud)
我能够简化@ Jon的答案,并且仍然可以与iOS 7上的Photos应用程序区分开来.看起来像显示时的延迟更新是没有必要的.
- (IBAction)toggleUI:(id)sender {
self.hidesUI = !self.hidesUI;
CGRect barFrame = self.navigationController.navigationBar.frame;
CGFloat alpha = (self.hidesUI) ? 0.0 : 1.0;
[UIView animateWithDuration:0.33 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
self.navigationController.navigationBar.alpha = alpha;
}];
self.navigationController.navigationBar.frame = CGRectZero;
self.navigationController.navigationBar.frame = barFrame;
}
- (BOOL)prefersStatusBarHidden {
return self.hidesUI;
}
Run Code Online (Sandbox Code Playgroud)
解决此问题的方法取决于应用程序 plist 中“基于视图控制器的状态栏外观”设置的值。
如果“查看基于控制器的状态栏外观”NO在您的 plist 中,那么此代码应该可以工作:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
Run Code Online (Sandbox Code Playgroud)
如果“基于视图控制器的状态栏外观”处于启用状态,请在视图控制器中添加以下方法:
- (BOOL) prefersStatusBarHidden {
// I've hardcoded to YES here, but you can return a dynamic value to meet your needs for toggling
return YES;
}
Run Code Online (Sandbox Code Playgroud)
对于切换,当您想根据上述方法的值更改状态栏是否隐藏/显示时,您的视图控制器可以调用该setNeedsStatusBarAppearanceUpdate方法。
| 归档时间: |
|
| 查看次数: |
16124 次 |
| 最近记录: |