【发布时间】:2014-12-09 17:35:42
【问题描述】:
我正在尝试从带有隐藏导航栏的视图控制器推送带有可见导航栏的视图控制器。
我在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
没有任何效果。我还尝试了自定义代码来“动画”推送和弹出,这有效,但我失去了边缘滑动和视图平移。在我深入挖掘之前,只是想确保我没有重新发明轮子。
Starbucks 应用程序是我试图模仿的。
应用程序的根视图控制器(深色背景视图)是全屏的,请注意它没有 UINavigationBar。但是,当您点击其中一个按钮时,它会推动带有 UINavigationBar 的视图控制器(浅色背景视图)。从那里,如果您点击“后退”箭头,它会弹出导航栏的视图控制器。交互式弹出滑动手势也可以使用。
【问题讨论】:
-
是在第二个视图中显示导航栏以便有后退按钮的唯一原因吗?还是您需要导航栏的其他内容(除了标题/副标题)?
-
肯定需要返回按钮,但随着用户深入研究,还需要一个功能导航控制器/栏。
-
啊,明白了。我要说的是,您可以使用调用 popViewControllerAnimated 的后退按钮将自定义视图添加到顶部并保持导航栏隐藏。我想您仍然可以,但我不知道随着您深入研究,事情会变得多么复杂
-
我不确定你的问题是什么——你提到了隐藏导航栏的代码,但没有提到实际推送下一个控制器的代码。你是在调用 pushViewController:animated: 吗?
-
如果您想在没有自动实现的返回功能的情况下滑动,请将其添加到您的 VC。我通常把它放在 viewDidLoad 中:
self.navigationController.interactivePopGestureRecognizer.delegate = self;
标签: ios objective-c iphone