方法一
/此種方式隱藏導航欄一般應用于首頁,因為此種方式會導致返回按鈕消失
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.navigationController.navigationBar.hidden = YES;
//設置狀態欄的顏色(如果不需要設置,可以忽略)
if ([[[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"] respondsToSelector:@selector(setBackgroundColor:)]) {
[[[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"] setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.1]];
}
//如果狀態欄背景為淺色,應選用黑色字樣式(UIStatusBarStyleDefault,默認值);如果背景為深色,則選用白色字樣式(UIStatusBarStyleLightContent)。
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self.navigationController.navigationBar.hidden = NO;
//將狀態欄的顏色改回來
if ([[[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"] respondsToSelector:@selector(setBackgroundColor:)]) {
[[[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"] setBackgroundColor:[UIColor blueColor]];
}
}
方法二
#import "MyViewController2.h"
#import "AppDelegate.h"
@interface MyViewController2 ()
@property(strong,nonatomic)UIImageView* barImageView;
@end
@implementation MyViewController2
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blueColor];
// Do any additional setup after loading the view.
//為了防止push,pop是,顯示短暫的黑色
AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
app.window.backgroundColor = [UIColor whiteColor];
self.barImageView = self.navigationController.navigationBar.subviews.firstObject;
}
//此種導航欄的隱藏是改變圖片的透明度,還可以用來做導航欄顏色根據tableView的偏移量動態改變
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
_barImageView.alpha = 0 ;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
_barImageView.alpha = 1 ;
}
@end
Demo地址https://github.com/JnLuffy/LFY_IOS_DEMOLIST/tree/master/LFY_NavigationBar_Demo