我正在尝试从具有隐藏导航栏的 View Controller 中推送具有可见导航栏的 View Controller 。

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

// 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

没事。我还尝试了自定义代码以“动画化”推送和弹出动画,这种方法有效,但是我失去了边缘滑动和 View 平移的功能。在深入研究之前,只想确保我没有重新发明轮子。

我正在尝试模仿星巴克应用程序。

应用程序的根 View Controller (深色背景 View )是全屏显示,请注意它没有UINavigationBar。但是,当您点击其中一个按钮时,它将通过UINavigationBar插入 View Controller (浅色背景 View )。从那里,如果您点击“后退”箭头,则其 View Controller 随导航栏一起弹出。交互式弹出式滑动手势也可以使用。

最佳答案

无需自己编写解决方案,这是可能的。这是您的工作:

您的根viewController:

@implementation ViewController

....

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

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

@end

和推的viewController:
@implementation SecondViewController

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

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

@end

这样就可以了。它还使交互式过渡保持工作;)

但是,我发现苹果根本没有记录这种类型的功能,这令人不安。 -您还可以使用这些“调用点”隐藏和显示工具栏(在viewWillAppear内部:)

编辑

我刚刚意识到,这与您在问题中编写的代码相同。请再次测试。我100%确信这可行-我也在其中一个应用程序中使用了此功能。

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

关于ios - 没有导航栏的View Controller中带有导航栏的Push/Pop View Controller,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26369046/

10-11 22:02
查看更多