我有一个关于在不同的UIViewControllers中设置不同样式的导航栏的问题。我有4个不同的控制器,我希望最后一个是完全透明的白色导航项目,另一个是白色的黑色导航项目。
有一个快速简便的解决方案吗?我正在考虑为appdelegate中的每个视图设置样式
答案 0 :(得分:1)
您需要做的是在视图出现之前保存导航栏tintColor
和barTintColor
,并将其更改为您需要的任何内容。然后当视图消失时,恢复之前的视图。
@interface MyViewController ()
@property (strong, nonatomic) UIColor *navigationBarTintColor;
@property (strong, nonatomic) UIColor *navigationTintColor;
@end
@implementation MyViewController
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// Save current colors
self.navigationBarTintColor = self.navigationController.navigationBar.barTintColor; // Background color
self.navigationTintColor = self.navigationController.navigationBar.tintColor; // Items color
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
self.navigationController.navigationBar.barTintColor = [UIColor clearColor];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// Get previous colors and set them
self.navigationController.navigationBar.barTintColor = self.navigationBarTintColor;
self.navigationController.navigationBar.tintColor = self.navigationTintColor;
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
}
编辑:仅在需要透明导航栏的视图控制器中使用此代码。