首先感謝@張智清
狀態(tài)條Status Bar
[UIApplication sharedApplication].statusBarHidden = YES;
下面也可以:
// iOS3.2+支持
[application setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
statusBarHidden屬性支持在iOS2.0+,setStatusBarHidden:animated:方法在iOS3.2中開始取消了蕾久,而采用了setStatusBarHidden:withAnimation:方法础芍。
上述方法只能實現(xiàn)在程序跳過loading(即啟動畫面)的時候才能隱藏狀態(tài)欄窜骄。如果想要在啟動畫面開始即隱藏狀態(tài)欄屁药,則要修改app的info.plist文件征峦,新增UIStatusBarHidden鍵(Status bar is initially hidden)于颖,其值是YES呆贿。
同理:對于狀態(tài)欄的顏色改變,也要分別從兩處著手恍飘,代碼[[UIApplicationsharedApplication]setStatusBarStyle:UIStatusBarStyleBlackOpaque];僅僅改變了啟動畫面之后的視圖上的狀態(tài)欄榨崩,要讓App應(yīng)用在啟動畫面之時就改變默認(rèn)顏色,則要修改info.plist文件章母,新增UIStatusBarStyle鍵(Status bar style)母蛛,其值有Opaque black style、Transparent black style和默認(rèn)的Gray style乳怎。
導(dǎo)航條Navigation Bar
self.navigationController setNavigationBarHidden:YES];
選項卡TabBar
方法一:
[self.tabBarController.tabBar setHidden:YES];
此方法的問題:雖然tabBar欄被隱藏了彩郊,但該區(qū)域成一片空白區(qū),無法被其他視圖使用蚪缀。
方法二:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil2 {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization.
self.hidesBottomBarWhenPushed = YES;
}
return self;
}
對于navigationController+tabBarController的結(jié)構(gòu)秫逝,可以在push下一級的childController之前將childController的hidesBottomBarWhenPushed屬性設(shè)為YES。比如询枚,可以在childController的初始化方法中做這件事违帆,代碼如下:
方法三:
- (void)makeTabBarHidden:(BOOL)hide
{
if ( [self.tabBarController.view.subviews count] < 2 )
{
return;
}
UIView *contentView;
if ( [[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] )
{
contentView = [self.tabBarController.view.subviews objectAtIndex:1];
}
else
{
contentView = [self.tabBarController.view.subviews objectAtIndex:0];
}
// [UIView beginAnimations:@"TabbarHide" context:nil];
if ( hide )
{
contentView.frame = self.tabBarController.view.bounds;
}
else
{
contentView.frame = CGRectMake(self.tabBarController.view.bounds.origin.x,
self.tabBarController.view.bounds.origin.y,
self.tabBarController.view.bounds.size.width,
self.tabBarController.view.bounds.size.height - self.tabBarController.tabBar.frame.size.height);
}
self.tabBarController.tabBar.hidden = hide;
// [UIView commitAnimations];
}
存放時機
- (void)viewWillAppear:(BOOL)animated
{
[self setFullScreen:YES];
}
- (void)viewWillDisappear:(BOOL)animated
{
[self setFullScreen:NO];
}
- (void)setFullScreen:(BOOL)fullScreen
{
// 狀態(tài)條
[UIApplication sharedApplication].statusBarHidden = fullScreen;
// 導(dǎo)航條
[self.navigationController setNavigationBarHidden:fullScreen];
// tabBar的隱藏通過在初始化方法中設(shè)置 hidesBottomBarWhenPushed屬性來實現(xiàn)
}
***從簡單的一個沒有導(dǎo)航欄的界面A push到另一個有導(dǎo)航欄的界面B ***
.
iOS 狀態(tài)欄(StatusBar)問題
1.啟動時隱藏狀態(tài)欄
在.plist文件里添加字段
Status bar is initially hidden
把值設(shè)為YES
2.啟動時狀態(tài)欄顏色
在.plist文件里添加字段
Status bar style
設(shè)置值為:
白色:Transparent black style (alpha of 0.5)
黑色:Gray style (default)
不透明黑色:Opaque black style
經(jīng)測試,當(dāng)值為:Opaque black style是在iOS 9.3下直接消失金蜀,翻看SDK發(fā)現(xiàn)StatusBarStyle樣式只有2種刷后。可能被棄用渊抄。未考證
3.狀態(tài)欄不能根據(jù)控制器改變
檢查.plist文件是不是存在字段:View controller-based status bar appearance
且值為:NO
4.控制器的狀態(tài)欄樣式和隱藏
樣式,重寫控制器的preferredStatusBarStyle方法尝胆。
OC
-(UIStatusBarStyle)preferredStatusBarStyle{
// return UIStatusBarStyleLightContent;//白色
return UIStatusBarStyleDefault;//黑色
}
Swift
override func preferredStatusBarStyle() -> UIStatusBarStyle {
// return UIStatusBarStyle.Default //黑色
return UIStatusBarStyle.LightContent//白色
}
隱藏,重寫控制器的prefersStatusBarHidden方法
OC
-(BOOL)prefersStatusBarHidden{
return YES;
}
Swift
override func prefersStatusBarHidden() -> Bool {
return true
}
5.當(dāng)一個控制器存在多個自控制器的時候护桦,如何控制狀態(tài)欄含衔。
例如:UITabBarController
在UITabBarController中切換到不同子控制器,狀態(tài)欄是由子控制器控制的。
如果在進(jìn)入這個UITabBarController的時候所有的子控制器的狀態(tài)欄都改變該怎么做呢二庵?如果在UITabBarController里面重寫prefersStatusBarHidden和preferredStatusBarStyle方法你會發(fā)現(xiàn)贪染,設(shè)置無效。
這時候就要講講這兩個方法了:
childViewControllerForStatusBarHidden
和
childViewControllerForStatusBarStyle
這兩個方法的返回值都是UIViewController催享,這兩個方法的作用很簡單,返回的是在這個控制器響應(yīng)prefersStatusBarHidden和preferredStatusBarStyle方法抑进。
如果childViewControllerForStatusBarHidden和childViewControllerForStatusBarStyle的返回值為空則響應(yīng)自身的prefersStatusBarHidden和preferredStatusBarStyle方法。
完睡陪。