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
希望能帮助到你。
干杯。
我需要在应用程序中添加一个离线指示栏。它需要在导航栏和视图控制器的视图之间。无论按下多少个控制器,离线栏都需要始终可见。栏不能重叠任何东西,所以添加子视图到导航栏不是一个选项。
第一种方法:
我添加了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
希望能帮助到你。
干杯。