呈现 UIViewController 后 iOS UINavigationBar 损坏

Posted

技术标签:

【中文标题】呈现 UIViewController 后 iOS UINavigationBar 损坏【英文标题】:iOS UINavigationBar Becoming Corrupted After Presenting UIViewController 【发布时间】:2015-03-19 04:21:31 【问题描述】:

在我的应用程序中,我有一个 UITabBarController,其中有 4 个标签,每个标签中都有 UINavigationController。当用户从表中选择某些内容时,我从UINavigationController 之一的根 VC 推送一个新的UIViewController。从该详细视图可以像这样呈现模态视图:

PlayerViewController *playerViewController = [[PlayerViewController alloc] initWithNibName:@"PlayerViewController" bundle:nil];
playerViewController.videoURL = videoURL;
[self presentViewController:playerViewController animated:YES completion:nil];

如果没有显示该模态视图,则应用程序功能正常,但如果我从推送的IUViewController 中显示该模态视图,那么当弹出该IUViewController 时,UINavigationBar 会损坏并且下一次视图是推我明白了:

nested push animation can result in corrupted UINavigationBar

我已经检查以确保详细视图没有被多次推送,但我不知道是什么原因造成的。

【问题讨论】:

你试过用pushViewController代替presentViewController吗?出现问题了吗? Umang Bista,我刚刚尝试过,确实有效,但是我需要以模态方式呈现此视图,以便标签和导航栏不再可见。 您使用的是哪个版本的 ios?模拟器还是设备? Found this link 和 this from RayWenderlich 你是在没有先关闭模态视图控制器的情况下弹出视图控制器吗? rdelmar 不,每个步骤都由用户触发。首先关闭模态视图,然后按详细视图上的后退按钮。 【参考方案1】:

在呈现 ViewController 之前尝试设置 playerViewController.modalPresentationStyle = .CurrentContext

【讨论】:

以上是关于呈现 UIViewController 后 iOS UINavigationBar 损坏的主要内容,如果未能解决你的问题,请参考以下文章

Swift - iOS 9:如何在 iOS 9 中呈现具有自定义大小的 UIViewController? [复制]

当键盘出现在 iOS8 的 iPad 上时,向上移动模态呈现的 UIViewController

如何使用完成按钮呈现包含 iOS App Store 的 UIViewController

如何以编程方式从 iOS Swift 3 中的 XIB 推送和呈现给 UIViewController

UIViewController 的视图在呈现后立即改变尺寸

从另一个 UIViewController 中呈现一个 UIViewController?