UINavigationBar 弹出进出而不是滑动

Posted

技术标签:

【中文标题】UINavigationBar 弹出进出而不是滑动【英文标题】:UINavigationBar popping in and out instead of sliding 【发布时间】:2012-11-09 03:07:10 【问题描述】:

我有一个基于导航的应用程序,带有 2 个控制器:vA 和 vB。

vA 是导航控制器的根视图控制器,它是一个全屏控制器,所以当这个控制器显示时,导航栏是隐藏的。

然后我使用

推送 vB

[self.navigationController pushViewController:vB 动画:YES];

在 vB 的 viewDidLoad 上我有这个:

self.navigationController.navigationBarHidden = NO;
// then I have navigation buttons defined here

vB从右侧进入屏幕的动画是这样发生的:

    导航栏突然出现在 vA 上 vB 从右侧滑动并填满屏幕。

当我弹出 vB 时,会发生这种情况

    vB 向左滑动,显示 vA。 此时,我们看到顶部可见导航栏的 vA。记住 vA 应该没有可见的导航栏。然后,导航消失,vA 调整为全屏。

这个动画没有优雅,糟糕,笨拙和错误。

我想要的是:导航与 vB 一起滑入和滑出。

我该怎么做?

谢谢。

【问题讨论】:

【参考方案1】:

你需要使用你在vcB的viewDidLoad中使用的方法的动画版:

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

编辑后:它似乎在 viewDidLoad 或 viewWillAppear(但不是 viewDidAppear)中工作正常。它需要在 viewWillDisappear 中才能返回。

【讨论】:

【参考方案2】:

尝试以下方法:

- (void)viewWillAppear:(BOOL)animated

    [self.navigationController setNavigationBarHidden:YES animated:animated];
    [super viewWillAppear:animated];


- (void)viewDidDisappear:(BOOL)animated 
    [self.navigationController setNavigationBarHidden:NO animated:animated];
    [super viewDidDisappear:animated];

// OR viewWillDisappear as mentioned by @RubberDuck

不是在viewDidLoad中隐藏导航栏,而是实现viewWillAppearviewDidDisappear

【讨论】:

打字30秒后我意识到解决方案是这样的,你的答案几乎就在那里,右边是viewWillDisappear!谢谢!

以上是关于UINavigationBar 弹出进出而不是滑动的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 UINavigationBar 上的向右滑动手势?

iOS 故事板 UINavigationController 不正确地弹出视图(向下滑动,而不是向右滑动)

使用滑动隐藏的 UINavigationBar 会留下一个拦截点击以显示它的区域?

将 UIImageView 全局添加到 UINavigationBar 而不是标题

UINavigationBar 在滚动/滑动隐藏后将不再显示

在我的 UINavigationBar 中为我的标题添加图像而不是标题