如何在没有 UINavigationController 的情况下为 detailViewController 视图设置动画?

Posted

技术标签:

【中文标题】如何在没有 UINavigationController 的情况下为 detailViewController 视图设置动画?【英文标题】:How to animate a detailViewController view without UINavigationController? 【发布时间】:2010-11-13 05:37:30 【问题描述】:

在 iPad 应用程序中,我有一个 tableView 作为*** viewController 的子视图 - 我们称之为 topVC。 tableView 由一个专用的 viewController 控制,tblVC,它是topVC 的一个属性。我需要 tableView 来支持 iPhone 风格的 detailView 导航。

在 IB 的 topVC.xib 中设置 UINavigationController 属性,将 tblVC 连接为 rootViewController,但不起作用,所以我在 topVC viewWillAppear: 中以编程方式设置了 UINavigationController 初始化它tblVC 作为 rootViewController,并将其视图设置为 topVC 的子视图。这可以正常工作,但在旋转到横向时,navigationController 的 navigationBar 会弹出到topVC 视图的顶部。

是否可以在没有UINavigationController、使用UINavigationBarUINavigationItem 的情况下手动实现detailView 导航和基本的iPhone 式滑入动画?我想过将detailView设置在tableView的框架之外并手动将其滑入,但这只会使其出现在另一个子视图上并滑入tableView。如何做到这一点?

【问题讨论】:

【参考方案1】:

您可以考虑使用弹出视图控制器,并在其中托管一个标准 UINavigationController,其中包含您的 UITableViewController。

否则,您将不得不推出自己的导航控制器。我发现它是一个真正的 PITA,它可以改变/影响你所看到的一些先天行为,比如在旋转时重新定位。

【讨论】:

在 topVC 子视图中使用位于 tableView 上方的 UINavigationBar(而不是使用 UINavigationController 进行配置)解决了方向更改问题,即 ios 按预期重新流动/重新调整子视图的大小。弹出框是一个很好的替代建议,但不是我所追求的。谢谢。

以上是关于如何在没有 UINavigationController 的情况下为 detailViewController 视图设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 中设置自定义导航栏类

在 Swift 2.0 中设置 UINavigationController 栏标题

UITabBarNavigationController 中的 UINavigationController 不加载表数据

用动画隐藏导航控制器和标签栏控制器

UINavigationController -> UIViewController -> UIView -> UITableViewController?

功能差异,UINavigationController vs Only Storyboard Segue