欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS开发技巧之状态栏字体颜色的设置方法

程序员文章站 2022-03-22 14:57:28
状态栏的字体为黑色:uistatusbarstyledefault 状态栏的字体为白色:uistatusbarstylelightcontent 一、在info.pli...

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

}

附:修改状态栏的背景颜色 (牵扯到uiwindow的层级关系)

/*改变状态栏的背景颜色,因为状态栏的层级比较高,所以按照如下添加就可以出来效果*/
uiview* stateview = [[uiview alloc] initwithframe:cgrectmake(0, -20, screen_width, 20)];
[self.navigationcontroller.navigationbar addsubview:stateview];
stateview.backgroundcolor = [uicolor purplecolor];

备注: 因为在oc中,都应该知道uiwindow有三个层级,如下:

uikit_extern const uiwindowlevel uiwindowlevelnormal;
uikit_extern const uiwindowlevel uiwindowlevelalert;
uikit_extern const uiwindowlevel uiwindowlevelstatusbar

它们层级的优先级的值分别对应的是:

uiwindowlevelnormal: 0

uiwindowlevelalert: 1000

uiwindowlevelstatusbar:2000

(而且uialertview的层级优先级为1996,uiactionsheet的层级优先级为2001)
优先级

总结:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。