推送/弹出视图控制器,带有导航栏,来自View Controller,不带导航栏

Yar*_*awh 18 iphone objective-c ios

我正在尝试使用隐藏的导航栏从视图控制器推送带有可见导航栏的视图控制器.

我尝试[[self navigationController] setNavigationBarHidden:YES animated:NO];了viewWillAppear,viewDidAppear,viewWillDisappear ......等各种组合.

// First View Controller

@implementation FirstViewController

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

    NSLog(@"[%@ viewWillAppear]", self);
}

@end


// Second View Controller


@implementation SecondViewController

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[self navigationController] setNavigationBarHidden:NO animated:NO];

    NSLog(@"[%@ viewWillAppear]", self);
}

@end
Run Code Online (Sandbox Code Playgroud)

没有任何效果.我还尝试了自定义代码来"动画"推送和弹出,这有效,但我失去了边缘滑动和查看平移.在我深入挖掘之前,只想确保我不重新发明轮子.

星巴克应用程序就是我想要模仿的东西.

应用程序的根视图控制器(深色背景视图)是全屏,并注意它没有UINavigationBar.但是当您点击其中一个按钮时,它会使用UINavigationBar推动视图控制器(浅色背景视图).从那里,如果您点击"后退"箭头,它会查看控制器弹出导航栏.交互式弹出滑动手势也有效.

星巴克iOS应用程序

Cab*_*bus 30

没有自己一起解决问题的解决方案是可能的.这是你做的:

你的root viewController:

@implementation ViewController

....

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

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

@end
Run Code Online (Sandbox Code Playgroud)

推送的viewController:

@implementation SecondViewController

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

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

@end
Run Code Online (Sandbox Code Playgroud)

这样做.它还使交互式过渡工作;)

然而,我觉得令人不安的是,苹果公司根本没有记录这种功能. - 您还可以使用这些"呼叫点"隐藏和显示工具栏(在viewWillAppear :)中

编辑

我刚才意识到这与你在问题中写的代码相同.请再试一次.我100%确定这是有效的 - 我也在我的一个应用程序中使用了这个功能.

另请注意,我的代码确实使用animated:animated而不是您的代码animated:NO.这可能是关键点:)