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

时间:2014-10-14 19:43:48

标签: ios objective-c iphone

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

我在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

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

星巴克应用程序正是我试图模仿的东西。

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

Starbucks iOS App

2 个答案:

答案 0 :(得分:30)

可以自己一起解决问题。这是你做的:

你的root 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

这样做。它还使交互式过渡保持有效;)

然而,我觉得令人不安的是,这种类型的功能完全没有由apple记录。 - 您还可以使用这些“呼叫点”隐藏和显示工具栏(在viewWillAppear内部)

修改

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

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

答案 1 :(得分:1)

我只是设置了两个视图控制器来来回测试。

@interface VC1 ()

@end

@implementation VC1

- (void)viewDidLoad {
[super viewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = YES;
}

@end

和第二个

#import "ViewControllerTwo.h"

@interface ViewControllerTwo ()

@end

@implementation ViewControllerTwo

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.navigationController.navigationBarHidden = NO;
}

@end

VC1嵌入在navigationController(它是应用程序的根控制器)中,并带有导航到ViewControllerTwo的按钮。我有来自VC1的push segue - > ViewControllerTwo,这个方法有效。当我点击按钮时,视图控制器在ViewControllerTwo上可见,当我按下时,导航栏就消失了。