UINavigationBar 在另一个视图继续时消失?

Posted

技术标签:

【中文标题】UINavigationBar 在另一个视图继续时消失?【英文标题】:UINavigationBar disappears when another view segue's to it? 【发布时间】:2013-07-19 02:08:01 【问题描述】:

我的应用中有 5 个视图控制器,项目以 NavigationController 开头。自然,当我可以将一个动作连接到从视图 1 到视图 2 的“推送”时,我的视图 2 将有一个导航栏和一个后退按钮。

所以我的布局是这样的:1 ViewController 有 4 个圆形矩形按钮,带有“推送”到其他 4 个视图的操作。因为我有 5 个,所以第五个实际上是我添加的附加视图,为了达到该视图,您必须触摸我放置在第四个视图中的圆形矩形按钮,该按钮将“水平翻转”到第五观点。

这是问题所在,现在我的第 5 个视图没有导航栏,当我在第 5 个视图上添加一个圆形矩形按钮以切换回第 4 个视图时,我现在看到以前的导航栏是不再存在。

我曾尝试手动添加导航栏以查看 4 和 5,我能够成功执行此操作,但我无法通过拖动它们向它们添加“返回”按钮。有人可以帮我解决这个问题吗?

【问题讨论】:

听起来你使用了模态转场来到达第五个视图,对吗? @SarabyteStudios 是的,这是正确的,这是手动转场 为了保留导航栏,它需要通过 push segue 呈现。 @SarabyteStudios 我只是尝试使用 push segue 进行操作,虽然它确实有效,但它并没有给我想要的外观,(我要翻转),因为酒吧确实消失了,我已经手动添加了一个导航栏,你能帮我添加一个后退按钮吗?如果我一直使用“push”,我会自动使用相同的方法吗? 【参考方案1】:

您可以使用自定义 segue 类,而不是添加后退按钮。创建一个名为“flip”的新文件,并使其成为 UIStoryBoardSegue 的子类。创建文件后,打开 flip.m 并将此代码粘贴到 @end 上方

- (void) perform 

UIViewController *src = (UIViewController *) self.sourceViewController;
UIViewController *dst = (UIViewController *) self.destinationViewController;
[UIView transitionWithView:src.navigationController.view duration:.8

                   options:UIViewAnimationOptionTransitionFlipFromLeft

                animations:^

                    [src.navigationController pushViewController:dst animated:NO];

                

                completion:NULL];


接下来转到您的情节提要并选择从第 4 个视图到第 5 个视图的转场。将样式设置为自定义并将segue类设置为:翻转

这将允许您保留导航栏和翻转动画。

【讨论】:

这在从第 4 到第 5 时效果很好,但是当我应用相同的 segue 类型翻转从第 5 到第 4 时,第 4 中的导航栏消失@SarabyteStudios 对不起,我忘了。那么最好的方法可能就是让它成为一个模态,添加一个导航栏和一个完成按钮,该按钮将关闭模态视图控制器。【参考方案2】:

您可以简单地将第 5 个 ViewController 嵌入到 navigationController 在第 5 个 VC 中现在将有一个导航栏。添加一个 UIBarButton 并将其链接到执行以下操作的方法:

[self.navigationController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

只是为了解释,你的第 5 个视图的导航控制器(你嵌入它的那个)现在将被它的 presentingViewController 解散

此外,模态翻转转场实际上将转到导航控制器。

编辑/注意:在进行这样的转换时,我发现以编程方式进行转换更容易,因此您可以将任何内容传递给(第 5 个)viewController 没有问题。在这种情况下,您将创建您的第 5 个 VC,然后创建以第 5 个 VC 作为其根的 navigationController。

// setup of firstVC
UIViewController *firstVC = [[UIViewController alloc] initWithNibName:@"firstVC" bundle:nil];

// Create the navCon with firstVC as root
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:firstVC];

// Set it to flip
[navCon setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];

// Now present it
[self presentViewController:navCon animated:YES completion:nil];

【讨论】:

以上是关于UINavigationBar 在另一个视图继续时消失?的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationViewController中的UITableView偏移,显示在UINavigationBar下

带有搜索图标的 UINavigationBar - 单击时推送模态搜索视图

将子视图添加到 UINavigationBar 时向下推 UITableView

与自定义视图控制器一起使用时,UINavigationBar 的 UIAppearance 不起作用...?

在 UINavigationBar 上呈现 UISearchController 时推送视图控制器

当用户在表格视图中向下滚动时,如何将 UINavigationBar 背景颜色从透明更改为红色