NavigationBar 和控制器视图之间的自定义栏

Custom bar between NavigationBar and controller's view

我需要在应用程序中添加一个离线指示栏。它需要在导航栏和视图控制器的视图之间。无论按下多少个控制器,离线栏都需要始终可见。栏不能重叠任何东西,所以添加子视图到导航栏不是一个选项。

第一种方法:

我添加了container view,并嵌入了一个navigation controller。离线栏保留,但导航栏在它下面,不能。

第二种方法:

添加了用于导航栏显示的主导航控制器,将 Root 包装到导航控制器中。在我点击 "Push child" 按钮之前,演示是正确的。嵌入式导航控制器和最顶部的导航栏之间没有连接,因此没有标题更改,也没有后退按钮。

您不能将一个栏置于另一个之上,因为两个栏属于不同的视图控制器。 但您可以将容器嵌入导航控制器并显示容器的导航栏,然后将子视图控制器的导航栏设置为隐藏。

----------------更新说明---------------------

1) 将您的容器视图控制器嵌入导航控制器(select 故事板中的容器视图控制器,然后编辑器 > 嵌入 > 导航控制器)。

2) 在容器视图控制器上添加红色离线视图。

3) 在子视图控制器的 viewWillAppear 中

[self.navigationController setNavigationBarHidden:YES animated:NO];

这样你就可以只显示容器视图控制器的顶部栏和红色栏,而只显示子控制器的顶部栏视图


我认为你可以用最简单的方法做到这一点。 首先你必须subclass UINavigationBar。然后覆盖 sizeThatFits: 和 returns 更大的尺寸。

#import "MyNavBar.h"

const CGFloat navigationBarHeightIncrease = 38.f;

@implementation MyNavBar

- (CGSize)sizeThatFits:(CGSize)size {

    CGSize amendedSize = [super sizeThatFits:size];
    amendedSize.height += navigationBarHeightIncrease;

    return amendedSize;
}

@end


然后调用 UINavigationController class 并在 viewDidLoad 中:添加您的自定义视图:

#import "MyNavController.h"

@interface MyNavController ()

@end

@implementation MyNavController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *redOfflineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 25)];
    redOfflineView.backgroundColor = [UIColor redColor];
    [self.navigationBar addSubview:redOfflineView];
}

@end


我发现了有关导航栏的有趣解决方案 here
希望能帮助到你。
干杯。