app状态栏隐藏 ios
2013-11-22 15:25:32 bianruifeng 阅读数 1150

在IOS7以前我们只需要执行[UIApplication  sharedApplication].statusBarHidden = YES 或者 Status bar is initially hidden    为 YES 即可隐藏状态栏。


可这段代码在IOS7上行不通!在IOS7上隐藏状态栏有两种方法:
 //方法一(代码设置):
在uiviewcontroller的子类下,调用:

    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])

 {    [self prefersStatusBarHidden];     }

- (BOOL)prefersStatusBarHidden {     return YES; }
  在视图切换,比如addsubview,present,pushin等,也需要注意及修改该状态栏。

//方法二(在plist里设置):


对ios7以下都适用

首先设置key:Status bar is initially hidden    为YES (iOS7 之前仅设置此项即可,但7下仅设置此项不行。)
然后设置key:View controller-based status bar appearance  为NO

即可实现全局隐藏状态栏了 


有一个问题就是自定义的viewController用上述方法是可以隐藏状态栏的,但一些系统定义的viewController比如MFMessageComposerViewController和MFMailComposerViewController,UIPeoplePickerViewController,UIImagePickerViewcontorller这些是不能隐藏状态栏的,

解决方法是重写UIViewController的- (BOOL)preferStatusBarHidden方法,然后把所有的viewController都引用这个重写的类的.h,就可以实现真正意义上的隐藏状态栏。


改变状态栏的颜色:

如果觉得在iOS 7启动期间状态栏黑色不合你意,以下方法可改变Status bar style成白色

在工程的plist添加 Status bar style,改变style值

默认是Gray style,选择后面两个任意一个都可以


状态栏的字体颜色只能是黑白两色,不能设置其它颜色。

状态栏的字体为黑色:UIStatusBarStyleDefault 

状态栏的字体为白色:UIStatusBarStyleLightContent


一、在info.plist中,将View controller-based status bar appearance设为NO


状态栏字体的颜色只由下面的属性设定,默认为白色:

// default is UIStatusBarStyleDefault

[UIApplication sharedApplication].statusBarStyle


解决个别vc中状态栏字体颜色不同的办法


1、在info.plist中,将View controller-based status bar appearance设为NO.

2、在app delegate中:

   [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;


3、在个别状态栏字体颜色不一样的vc中


-(void)viewWillAppear:(BOOL)animated{

    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;

}


-(void)viewWillDisappear:(BOOL)animated

{

    [super viewWillDisappear:animated];

    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

}


二、在info.plist中,将View controller-based status bar appearance设为YES,或者没有设置。


View controller-based status bar appearance的默认值就是YES。


如果View controller-based status bar appearance为YES。

则[UIApplication sharedApplication].statusBarStyle 无效。


用下面的方法:

1、在vc中重写vc的preferredStatusBarStyle方法。

-(UIStatusBarStyle)preferredStatusBarStyle

{

    return UIStatusBarStyleDefault;

}

2、在viewDidload中调用:[self setNeedsStatusBarAppearanceUpdate];


但是,当vc在nav中时,上面方法没用,vc中的preferredStatusBarStyle方法根本不用被调用。

原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,

只会调用navigation controller中的preferredStatusBarStyle方法,

vc中的preferredStatusBarStyley方法跟本不会被调用。


解决办法有两个:

方法一:

设置navbar的barStyle 属性会影响status bar 的字体和背景色。如下。

    //status bar的字体为白色

    //导航栏的背景色是黑色。

    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

    

    //status bar的字体为黑色

    //导航栏的背景色是白色,状态栏的背景色也是白色。

    //self.navigationController.navigationBar.barStyle = UIBarStyleDefault;


方法二:

自定义一个nav bar的子类,在这个子类中重写preferredStatusBarStyle方法:

MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];

self.window.rootViewController = nav;


@implementation MyNav


- (UIStatusBarStyle)preferredStatusBarStyle

{

    UIViewController* topVC = self.topViewController;

    return [topVC preferredStatusBarStyle];

}





导航栏透明方法:
  UIImage *image = [UIImage imageNamed:@"clear"];
    [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:image];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];//setBackgroundImage设置成功,不过会多出一条线白线,需要通过setShadowImage设置背景图片
    [self.navigationController.navigationBar setShadowImage:[UIImage new]];
导航栏有个属性不要设置:
self.navigationController.navigationBar.translucent = YES;//如果是NO得话表示导航栏不透明且占空间,其他坐标是从导航栏下开始计算的。
如果在UIViewController中,想让视图置顶需要:
 self.edgesForExtendedLayout = UIRectEdgeAll;//这个默认是UIRectEdgeNone 表示视图坐标的计算是从导航栏下开始的。
如果是UITableViewController 要在透明的navigationController 中置顶需要:
self.automaticallyAdjustsScrollViewInsets = NO;//专门针对scrollView的,表示自动计算scrollview 的contentview 中的位置,让其不被导航栏挡住。默认是YES


2015-11-27 16:00:35 zhq9108 阅读数 256

1、首先在 Info.plist 文件找到 Status bar is initially hidden ,设为 YES

(这一项可设可不设)还需增加 View controller-based status bar appearance 一行,选择为 NO。

2、在代码里面打开

通过[UIApplication sharedApplication] 取得app的单例,然后调用setStatusBarHidden方法显示 Status Bar。

2016-04-28 17:34:00 weixin_30677475 阅读数 1

iOS7之后如果想让UIApplication 管理状态栏需要在info.plist 中设置View controller-based status bar appearance 为NO

 

iOS7 之后状态栏是由控制器设置的

控制器中添加这个可以隐藏

-(BOOL)prefersStatusBarHidden
{
    return YES;

}
    [self setNeedsStatusBarAppearanceUpdate];//更新状态状态


 

转载于:https://www.cnblogs.com/xiezefeng/p/5443519.html

2015-01-01 02:34:10 zszeng 阅读数 388

以前的做法是在viewcontroller自定义类内添加:

- (BOOL)prefersStatusBarHidden{
    return YES;
}

现在只需要在info.plist文件内添加一项"View controller-based status bar appearance"为默认的"NO"就ok了


资料:

http://stackoverflow.com/questions/19134120/cocos2d-games-in-ios7-not-hide-status-bar

http://www.programmingforiphone.com/cocos2d/cocos2d-hide-status-bar-in-ios7/


2016-12-12 09:57:00 weixin_33804990 阅读数 2

在IOS9.0之前,苹果公司使用以下方法隐藏状态栏:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

这是一个全局的方法,应用于整个应用。

IOS9.0之后,苹果公司废弃了以上方法,默认采用了UIViewController管理状态栏的策略,使用以下方法:

-(BOOL)prefersStatusBarHidden

{

return YES;

}

每个控制器单独管理对应的状态栏。

如果还想使用全局管理的方法,在配置的Info.plist里面修改View controller-based status bar appearance的值为NO。


4023917-45b3b96a49a62c6c.png

转载于:https://www.jianshu.com/p/fd90c1bb8814

iOS 状态栏的隐藏

阅读数 406

ios 状态栏隐藏

阅读数 8

iOS状态栏隐藏

阅读数 3

iOS状态栏隐藏

阅读数 222

iOS状态栏隐藏

阅读数 471

没有更多推荐了,返回首页