2016-03-03 09:54:24 aaaaazq 阅读数 1159

ios上状态栏 就是指的最上面的20像素高的部分 
状态栏分前后两部分:

前景部分:就是指的显示电池、时间等部分;

背景部分:就是显示黑色或者图片的背景部分;


一、设置statusBar的【前景部分】

状态栏的字体为黑色: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];

}

二、设置statusBar的【背景部分】

1、系统提供的方法

navigationBarsetBarTintColor接口,用此接口可改变statusBar的背景色

注意:一旦你设置了navigationBar- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改变statusBar的背景色,statusBar的背景色就会变成纯黑色。

2、设置了navigationBar的背景图片时(亲测可用)

UIImage* img = [UIImageimageNamed:@"img_home_navigation_top"];

img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(1,1,0,1)resizingMode:UIImageResizingModeStretch];

[self.navigationController.navigationBarsetBackgroundImage:imgforBarMetrics:UIBarMetricsDefault];

上面的代码可以将导航的背景图片铺满状态栏

3、任何的状态栏背景设置(以下是网上看到的资料,没亲测)

创建一个UIView, 
设置该UIView的frame.size 和statusBar大小一样, 
设置该UIView的frame.origin 为{0,-20}, 
设置该UIView的背景色为你希望的statusBar的颜色, 
在navigationBar上addSubView该UIView即可。


感谢网上的资料整理者和分享者

2016-01-25 16:59:40 Leemin_ios 阅读数 2838

UIApplicationWillChangeStatusBarFrameNotification,接这个系统通知会得到最新的statusBar的frame,根据最新的frame来调整视图。


// 在相应的ViewController 写适配方法
- (void)adapterstatusBarHeight{
// 之所以加这段代码,是因为当设置个人wifi热点等情况下,状态栏高度会由20像素变成40像素
// 导致底部的tab被往下挤掉一部分,所以这种情况下,tab的Y坐标就要向上移动20像素
CGRect statusBarRect = [[UIApplication sharedApplication] statusBarFrame];
int shouldBeSubtractionHeight = 0;
if (statusBarRect.size.height == 40) {
shouldBeSubtractionHeight = 20;
}
if ([[UIDevice currentDevice].systemVersion floatValue]>=7.0[[UIDevice currentDevice].systemVersion floatValue]<6.0) {
tabBar.frame = CGRectMake(0, __MainScreen_Height-49 - shouldBeSubtractionHeight , 320, 49);
}else{
tabBar.frame =CGRectMake(0, __MainScreen_Height-69 - shouldBeSubtractionHeight , 320, 49);
}
}

在AppDelegate的这个函数函数去调用
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
[[UIApplication sharedApplication] cancelAllLocalNotifications];
application.applicationIconBadgeNumber = 0;
[[mainViewController sharedmain] adapterstatusBarHeight];
}

2016-06-03 13:50:01 wgl_happy 阅读数 298

一.什么是状态栏

iOS7状态栏就是指的最上面的20像素高的部分

状态栏分前后两部分,分别是:

· 前景部分: 就是指的显示电池、时间等部分

· 背景部分: 就是显示黑色或者图片的背景部分

二.修改状态栏的前景部分的颜色

1.状态栏可以设置成两种颜色:

typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
    UIStatusBarStyleDefault                                     = 0, // Dark content, for use on light backgrounds
    UIStatusBarStyleLightContent     NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds
    
    UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
    UIStatusBarStyleBlackOpaque      NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;

UIStatusBarStyleDefault 默认颜色,黑色

UIStatusBarStyleLightContent 白色

2.修改颜色有两种方法:

 ①.在项目中的Info.plist中添加一个属性  Key值是View controller-based status bar appearance  Type是Boolean  Value值是NO .有人说这样不方便,我教大家一种好的办法:在Info.plist上右击,以源代码方式打开.如下图:

之后再<key>之前加入以下代码:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

在要改变状态栏颜色的UIViewController中添加以下代码:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];

或者:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];

就可以了

 ②.在Info.plist中将View controller-based status bar appearance设置成YES,或者不设置,因为它默认为YES.

在要改变状态栏颜色的UIViewController中添加以下方法:

- (UIStatusBarStyle)preferredStatusBarStyle;

注意:如果将它设置成NO时,上面的步骤将不起作用

三.总结:

1、若是在控制器覆写了-(UIStatusBarStyle)preferredStatusBarStyle方法,却发现没有作用,查看是否Info.plist文件中将View controller-based status bar appearance设置为NO了

2、当ViewController在UINavigationController中时,如果导航栏存在,则以UINavigationController中-(UIStatusBarStyle)preferredStatusBarStyle返回风格为标准;如果导航栏隐藏了,则以控制器中返回的风格为标准

3、在iOS8中,UIStatusBarStyleBlackTranslucent与UIStatusBarStyleBlackOpaque相当于UIStatusBarStyleLightContent

2018-03-19 17:13:25 Harvey_DHui 阅读数 2087
在ios中对于导航栏和状态栏调整遇到问题的,请往下看。
如果系统添加导航栏和状态栏满足不了需求,可以尝试自定义制作满足自己需要的,以下提供方法和属性,让你自定义制作。
注意:状态栏  20像素     导航栏  44像素

方法一:
self.automaticallyAdjustsScrollViewInsets = NO;//当viewController中添加了tableview自动上移,可以用该属性关闭自动调整。

方法二:
self.edgesForExtendedLayout = UIRectEdgeNone;// viewController 的所有子视图都会关闭自动调整
    


针对自定义的导航栏和对状态栏调整有需求的可以往下看:
注意:如果你在info文件中添加了View controller-based status bar appearance ,请设置值为NO。如果没有添加,应添加。

全局:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;//设置全局状态栏字体颜色为黑色
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;  //设置全局状态栏字体颜色为白色
[[UIApplication sharedApplication] setStatusBarHidden:YES];//设置状态栏的状态隐藏
            
局部:
-(BOOL)prefersStatusBarHidden{
         return NO;//状态栏隐藏
}
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;//状态栏为黑色
      
2015-06-29 11:21:18 u011123724 阅读数 2770

iOS的状态栏就是指界面最上面显示时间、电池电量等,20像素高的那部分

状态栏分为前后两部分,

&  前景部分:指显示电池、时间等部分;

&  背景部分:指显示黑色活着图片的背景部分。

如下如所示,

前景部分为黑色,背景部分为蓝色


设置statusBar的【前景部分】

其实就是设置显示电池电量、时间、网络部分标示的颜色。

这里只能设置两种颜色:

&  默认的黑色(UIStatusBarStyleDefault

&  白色(UIStatusBarStyleLightContent


1.在plist设置statusBar

首先,在plist里增加一行View controller-based status bar appearance,系统会默认进行赋值为NO。


2.程序代码里设置statusBar

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];  

或者

//相对于上面的接口,这个接口可以动画的改变statusBar的前景色 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

设置statusBar的【背景部分】

navigationBarsetBarTintColor接口,用此接口可改变statusBar的背景色

注意:一旦你设置了navigationBar- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改变statusBar的背景色,statusBar的背景色就会变成纯黑色。

IOS状态栏

阅读数 5

ios状态栏重叠问题

阅读数 3526

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