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

时间:2015-10-26 10:55:32

标签: ios uinavigationcontroller uinavigationbar uicontainerview

我需要在应用中添加离线指标栏。它需要在导航栏和视图控制器的视图之间。无论推送多少个控制器,离线栏都需要始终可见。栏不能重叠任何内容,因此不能选择将子视图添加到导航栏。

第一种方法:

我已经添加了容器视图并嵌入了导航控制器。离线栏保留,但导航栏位于其下,但它不能。

Storyboard Current

第二种方法:

添加了导航栏演示的主导航控制器,将Root包装到导航控制器中。演示是正确的,直到我点击“推儿童”按钮。嵌入式导航控制器和最顶层导航栏之间没有连接,因此没有标题更改,也没有后退按钮。

enter image description here enter image description here

2 个答案:

答案 0 :(得分:1)


我认为你可以做到最简单。 首先,您必须继承UINavigationBar。然后覆盖sizeThatFits:并返回更大的大小。

#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


然后subcalss UINavigationController类和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的有趣解决方案
希望能帮助到你。
欢呼声。

答案 1 :(得分:0)

由于这两个条都属于不同的视图控制器,因此您无法在其他条上方使用一个条。 但您可以将容器嵌入导航控制器并显示容器的导航栏,然后将子视图控制器的导航栏设置为隐藏。

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

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

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

3)在子视图控制器的viewWillAppear

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

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