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

Posted

技术标签:

【中文标题】不同控制器中的导航栏样式不同?【英文标题】:Different navigation bar style in different controllers? 【发布时间】:2014-08-18 09:16:04 【问题描述】:

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

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

【问题讨论】:

【参考方案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];

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

【讨论】:

好像出了点问题。首先它说它是“'UITableViewController' 没有可见界面声明选择器'viewWillDisappear'”。第二个问题是,当我从具有透明背景的第四个控制器向后推时,即将到来的控制器也已更改为它。即使在所有控制器中设置您的代码!找不到原因.. @jbouaziz @MartinBorstrand 糟糕,我刚刚编辑了我的代码。我对其进行了测试,现在对我来说效果很好。 像魅力一样工作!非常感谢,关于它的一个小问题..那个透明导航栏中的边框底线,是否有可能在那个 View Controller 中摆脱那个底线? @jbouaziz @MartinBorstrand 你能试试这个吗? self.navigationController.navigationBar.shadowImage = [UIImage new]; 太棒了!非常感谢你的帮助! @jbouaziz

以上是关于不同控制器中的导航栏样式不同?的主要内容,如果未能解决你的问题,请参考以下文章

UITabBarController 内视图控制器的不同导航栏按钮/标题

iOS:不同情节提要中的 presentViewController 未显示导航栏

1个单一导航控制器内的不同导航栏颜色?

如何从不同的视图控制器更改导航栏图像

如何在 ReactJS 的不同页面上显示不同样式的导航栏?

状态栏样式与 ParentViewController 不同的模态视图控制器