隐藏导航栏,但是当我转换到上一个视图(弹出)时,它会暂时显示旧的后退按钮.为什么?

Dou*_*ith 17 objective-c uinavigationbar uinavigationcontroller ios uistoryboardsegue

我在导航控制器中有视图控制器(root:RootViewController,second:)ReadingViewController,但在第二个视图控制器中我想禁用导航栏UIToolBar(因为我不需要标题,想要更多按钮,比如iBooks或者Facebook应用程序).问题是,当我在第二个视图中隐藏导航栏时,当我弹出视图控制器(返回)时,它会再次随机出现一秒钟.

当我弹出视图控制器时,后退按钮会出现一秒钟:

在此输入图像描述

在第二个视图控制器中,我将导航栏隐藏在viewWillAppear::

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [self.navigationController setNavigationBarHidden:YES animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

同样在第二个视图控制器中,我恢复导航栏viewWillDisappear::

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    // ... other stuff

    [self.navigationController setNavigationBarHidden:NO animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何解决这个问题,以便视图控制器无缝过渡.

mat*_*att 14

这里的问题是viewDidLoad太快了!请记住,viewDidLoad界面和实际的推动动画没有任何关系.它并不意味着这个视图控制器的观点是即将出现在屏幕上!它仅意味着视图控制器已获得其视图.

我制作了一个视频,显示我的机器上发生了什么,因为我在导航界面中的两个视图控制器之间来回移动,其中一个显示导航栏,另一个不显示:http://youtu.be/PxpchytWQ4A

对我来说,这就像你在推动和弹出时显示和隐藏导航栏时所获得的那样连贯!这是我使用的代码.隐藏其导航栏的视图控制器属于ViewController2类.此代码位于app委托中:

- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    dispatch_async(dispatch_get_main_queue(), ^{
        [(UINavigationController*)self.window.rootViewController setDelegate:self];
    });
    return YES;
}

-(void)navigationController:(UINavigationController *)nc 
     willShowViewController:(UIViewController *)vc 
                   animated:(BOOL)animated 
{
    [nc setNavigationBarHidden:([vc isKindOfClass:[ViewController2 class]]) 
                      animated:animated];   
}
Run Code Online (Sandbox Code Playgroud)

这就是我所做的一切.


Ayu*_*ush 2

嘿,为什么不使用导航栏作为UIToolbar.

UINavigation您可以UITootlbar通过向其添加按钮来模仿导航控制器,而不是隐藏。

隐藏和取消隐藏UINavigation会很复杂。

我上传了保管箱链接

  • 这是一个有趣的想法,我会尝试这样做。不要使用“leftBarButtonItem”,而是尝试使用“leftBarButtonItems”(注意末尾的“s”,它是一个项目数组)。这样您就可以在导航栏中拥有任意数量的项目。您可以在 Pages.app 中查看使用示例。 (2认同)