部分屏幕区域中的 iOS UINavigationController 类似行为 (2016)

Posted

技术标签:

【中文标题】部分屏幕区域中的 iOS UINavigationController 类似行为 (2016)【英文标题】:iOS UINavigationController-like behaviour in a partial screen area (2016) 【发布时间】:2016-08-03 05:02:39 【问题描述】:

(我已阅读有关此主题的其他问题和答案,但大多数都非常旧,与 ios 9 或 10 无关。)

应用设计要求显示屏的上半部分始终包含相同的内容。 (用户正在编辑的图像。)

显示屏的下半部分需要UITableView。当UITableViewCell 被点击时,底部需要转换为带有滑动动画的新UIViewController,类似于UINavigationController 推送转场的工作方式。

问题:只有底部视图需要转换到新的视图控制器,然后再返回。视图层次结构的上半部分需要保持不受影响。出于这个原因,我不能将所有内容都放在UINavigationController 中,也不能将UINavigationBar 放在屏幕顶部。

问题:在这种情况下我应该采取什么方法,我只需要一个 UIView 层次结构就可以以 push-segue 方式进行转换,而不需要其他任何东西?谢谢。

使用解决方案编辑

解决方案如下,适合那些在家的人。

【问题讨论】:

你想在故事板中完成这一切吗?如果用代码编写,这会更简单。您可以从左右或左右对视图的框架进行动画处理 你是怎么把它变成上图的?我正在尝试将 NavigationController(包含多级 UITableView)构建到顶部和底部都有静态区域的 UIViewController 中。 IB 没有向我显示“容器视图”,而只是显示 UIView。 【参考方案1】:

是的,你实际上可以在下半部分使用 UINavigationController。

如果您使用 Storyboard,最简单的方法是为屏幕的每个部分使用 容器视图,然后您可以在顶部嵌入 UIViewController 并在UINavigationController 在底部。如果您以编程方式执行此操作,只需将视图控制器作为子视图控制器添加到应用程序的初始视图控制器(请参阅this answer 了解更多信息),这实际上是 Storyboard 在使用容器视图时自动为您执行的操作。

作为子视图控制器,UINavigationController 将独立于顶部 UIViewController 运行,并且应该按预期运行。

出于以下原因,我推荐编程方法:

它可以帮助您更好地了解子/父视图控制器的内部工作原理,这可能会为您节省大量的调试时间。 它使添加/删除/交换子视图控制器变得像几行代码一样简单。尝试使用 Storyboard 来实现这一点是出了名的笨拙和繁琐。 使用 GIT 更容易跟踪更改(大多数中型/大型公司实际上出于这个原因禁止使用 Storyboard)

【讨论】:

非常感谢,也感谢其他受访者!按照您的建议,我设法通过使用两个容器视图来使设计工作,在第二个容器中使用 UINavigationController,嵌入我需要的 UI。欢呼! 我还将探讨您关于更多地使用代码而不是使用故事板的建议。干杯。【参考方案2】:

如果您想更改部分屏幕,您可以使用容器视图。详情请参考Swift - How to link two view controllers into one container view and switch between them using segmented control?

【讨论】:

【参考方案3】:

您可以在一个视图控制器中使用多个视图,并且可以通过推送或弹出等动画来显示或隐藏它。

第二种方法是您可以使用Container View,它会产生类似导航堆栈的精确效果。

【讨论】:

以上是关于部分屏幕区域中的 iOS UINavigationController 类似行为 (2016)的主要内容,如果未能解决你的问题,请参考以下文章

iOS关于UITabView和UIAlertController,UIAlertAction以及UINavigation,值修改的传递页面推送

iOS UINavigationController(内容根据iOS编程编写)

如何填充屏幕中的矩形区域,在ios中具有良好的性能

如何在ios中以良好的性能填充屏幕中的矩形区域

iOS 11 中的 SafeArea:如何在没有安全区域的情况下使用自定义导航栏在主屏幕上添加来自 Objective-c 代码的视图

应用程序的 ios 11 颜色(uinavigation)