偶尔呈现模态视图会隐藏导航栏

时间:2009-06-04 00:36:45

标签: iphone cocoa-touch uikit

我现在遇到过这两次了。

有时使用以下代码行:

[self.navigationController presentModalViewController:aViewController animated:YES];

显示视图,然后隐藏导航栏。

我可以写:

[self.navigationController setNavigationBarHidden:NO];

在我心中的内容,我无处可想的任何地方。

有没有人碰到这个?

我在做些傻事吗?

4 个答案:

答案 0 :(得分:38)

不,我也碰到了这个。问题是,当您使用基于UIViewController的类呈现模态视图控制器时,它不会将调用导航控制器的导航栏扩展到模态。模态视图覆盖整个屏幕。我最终要解决的问题是创建一个UINavigationController并将基于UIViewController的类推送到它上面,然后将presentModalViewController执行到导航控制器的实例。

喜欢:

UIViewController *vc = [[UIViewController alloc] init];
UINavigationController *cntrol = [[UINavigationController alloc] initWithRootViewController:vc];
[self presentModalViewController:cntrol animated:YES];
[cntrol release];

这让我在顶部有一个导航栏。

我不确定这对你的特定情况是否有帮助,我建议的另一件事就是用UIAnimation复制模态的行为,UIAnimation停止在手机顶部44px以下。这样可以保持原始导航栏的可见性。

答案 1 :(得分:2)

@HeatMiser展示了解决无法在导航栏上显示项目的“错误”的好方法。但是,我不确定这是否是Presentation中的严重错误,因为模态操作应该胜过底层视图的界面主题。让模态操作的主题模仿底层的UI主题很好,但用导航视图包装真实的模态视图对我来说感觉不对(额外的视图对象只是为了获得更多的行为)。

相反,以下内容适用于我,并提供与“新邮件”在邮件程序中(在iPhone上)相同的行为。

在IB中,将UIToolBar放置在模态屏幕的顶部(模仿导航栏),使用“取消”和“保存”UIBarButtonItem以及两者之间的灵活空格键按钮项,以使按钮左右对齐。然后,在UIToolBar上添加一个UILabel(字体Helvetica,Bold,Size 18看起来与导航栏标题匹配)。将按钮连接到模态的UIViewController上的IBAction,你就完成了。

答案 2 :(得分:1)

也许这很明显,但是一旦你完成了模态视图并想要解雇它,你应该在你的模态vc中做这样的事情:

  

[parentController dismissModalViewControllerAnimated:YES];

其中parentController是对您提交模态视图的vc的引用。

答案 3 :(得分:1)

如果导航控制器处于活动状态,那么您应该只使用

[self.navigationController pushViewControllerAnimated:how];

将另一个视图控制器滑入,同时为自己和用户提供一致的用户界面,并提供“自动”后退按钮支持。

使用导航控制器后,只应放大模态视图控制器以扩大屏幕上的可用区域。然后,您应该使用花哨的动画让用户知道您正在离开导航控制器所体现的“任务”或“步骤”。