不同控制器中不同的导航栏样式?

时间:2014-08-18 09:16:05

标签: ios uinavigationcontroller uinavigationbar uinavigationitem

我有一个关于在不同的UIViewControllers中设置不同样式的导航栏的问题。我有4个不同的控制器,我希望最后一个是完全透明的白色导航项目,另一个是白色的黑色导航项目。

有一个快速简便的解决方案吗?我正在考虑为appdelegate中的每个视图设置样式

1 个答案:

答案 0 :(得分:1)

您需要做的是在视图出现之前保存导航栏tintColorbarTintColor,并将其更改为您需要的任何内容。然后当视图消失时,恢复之前的视图。

@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];
}

编辑:仅在需要透明导航栏的视图控制器中使用此代码。