【问题标题】:How to Hide UINavigationBar如何隐藏 UINavigationBar
【发布时间】:2012-10-20 20:22:41
【问题描述】:

是否可以放置覆盖导航栏的视图(对象)?我根本放不下。它总是隐藏在导航下。吧。

【问题讨论】:

  • 这与 Xcode 无关。已编辑。

标签: objective-c cocoa-touch view uinavigationbar


【解决方案1】:

我不建议尝试覆盖您的导航栏,因为它的存在是有原因的。但是,要完全隐藏它,您可以向导航控制器发送 setNavigationBarHidden:animated: 方法。

【讨论】:

    【解决方案2】:

    您可以在其中一个 viewController 的 viewDidLoad 中执行以下操作:

    - (void)viewDidLoad 
    {
        [super viewDidLoad];
        UIView* navigationBarCover = [[UIView alloc] initWithFrame:self.navigationController.navigationBar.frame];
        navigationBarCover.backgroundColor = [UIColor blackColor];
        [self.navigationController.view addSubview:navigationBarCover];
    }
    

    你也可以隐藏navigationBar,把视图放到viewControllers视图上:

    - (void)viewDidLoad 
    {
        [super viewDidLoad];
        [self.navigationController setNavigationBarHidden:YES animated:NO];
        UIView* navigationBarCover = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        navigationBarCover.backgroundColor = [UIColor redColor];
        [self.view addSubview:navigationBarCover];
    }
    

    【讨论】:

    • 这回答了 OP,但请不要这样做。非常糟糕的事情TM。
    【解决方案3】:

    如果您的UIViewControllerUITabBarController 下,则在调用viewDidLoad 之前不会设置[self navigationController],因为在选择其相应的选项卡之前不会确定其布局。到那时,[self navigationController] 的状态可能已经被 iOS 更改了,因此导航栏再次可见。

    对于影响视图布局的更改,最好在UIViewController 方法viewDidLayoutSubviews 中执行这些操作。在UIViewController 执行中的哪一点,[self navigationController] 将始终设置(如果有),并且 iOS 不会进一步更改其状态。

    viewDidLoad 理想情况下应该只用于实例化视图的内容,而不是在布局中定位它们。由于更改导航栏的可见性会影响视图的布局,因此在 viewDidLoad 内设置其可见性可能会导致未定义的行为。

    - (void) viewDidLayoutSubviews {
        [super viewDidLayoutSubviews];
        [[self navigationController]
            setNavigationBarHidden:YES
            animated:NO];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-27
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多