【问题标题】:Custom bar between NavigationBar and controller's viewNavigationBar 和控制器视图之间的自定义栏
【发布时间】:2015-10-26 10:55:32
【问题描述】:

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

第一种方法:

我添加了容器视图,并在其中嵌入了一个导航控制器。离线栏还在,但导航栏在它下面,它不能。

第二种方法:

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

【问题讨论】:

  • 只需将最左边的 VC 嵌入到导航控制器中,并在该 VC 的视图中添加一个栏。
  • 但是当我按下任何东西后,该栏就会消失。我需要该栏在任何推送的视图控制器上始终可见。
  • 您可以在运行时将栏添加到导航控制器以实现此目的。
  • 你能告诉我怎么做吗?向导航栏添加子视图会覆盖其内容。

标签: ios uinavigationcontroller uinavigationbar uicontainerview


【解决方案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


然后子类 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
希望能帮助到你。
干杯。

【讨论】:

  • 这几乎是完美的!现在我需要能够在运行时通过动画改变高度。但这很棒,伙计。特别是,因为它与 searchBar 完美配合,这在这里非常重要。
【解决方案2】:

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

---------------- 更新描述 ----------------------

1) 将您的容器视图控制器嵌入到导航控制器中(在情节提要中选择容器视图控制器,然后选择编辑器 > 嵌入 > 导航控制器)。

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

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

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

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

【讨论】:

  • 你能提供更多细节吗?不知道我是否明白该怎么做。
  • 还有一个问题。更新的问题。我认为没有必要使用单独的导航控制器(顶部)——相反,我将在 Container 中添加导航栏,然后尝试将其连接到嵌入式导航控制器——问题是,该怎么做?
  • 要将导航栏添加到容器中,它必须在导航堆栈中。除非你想使用自定义视图而不是导航栏
猜你喜欢
  • 2019-11-05
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 2014-04-10
相关资源
最近更新 更多