我应该将底部工作表作为子视图添加到当前视图控制器还是推送添加了子视图的 UIWindow?

Posted

技术标签:

【中文标题】我应该将底部工作表作为子视图添加到当前视图控制器还是推送添加了子视图的 UIWindow?【英文标题】:Should I add bottom sheet as a subview to current view controller or push a UIWindow with the subView added? 【发布时间】:2019-01-23 11:16:27 【问题描述】:

我想根据图像实现一个底页。 底部会有上下拉动的平移手势

我感到困惑的是:

我是否应该向现有视图控制器添加一个视图并将平移手势添加到该视图以向上和向下拉动。 应创建一个新窗口并将底部工作表添加为子视图并推送该窗口。

如果,我选择第二个选项我将如何更新 pan 上的窗口

【问题讨论】:

你可以通过这个有一个想法 - github.com/rashed008/swiftBottomSheet 感谢链接,它很有帮助,但它使用两个控制器来创建底部工作表我正在寻找的是我们可以通过添加一个窗口来做到这一点吗? 请看-cocoapods.org/pods/Bottomsheet 我认为这更像是一个架构师的问题。我不想使用任何外部库来实现这一点。 【参考方案1】:

您不应创建新的UIWindow。通常,ios 应用程序只有 1 个窗口。我看到的两个最佳选择是:

    您可以添加子视图和手势识别器来实现拉动。这意味着所有逻辑都可能在父 UIViewController 中。如果没有太多逻辑,而且工作表不必是可重复使用的,这是一个不错的选择。

    如果工作表内有更多逻辑,或者工作表具有可重用性,那么最好为此创建一个单独的UIViewController。然后,您可以使用自定义动画和演示控制器来演示它。为此请查看UIViewControllerAnimatedTransitioningUIPresentationController

我以前使用过第二个选项。 UIPresentationController 负责将工作表视图定位在屏幕底部。它还会使背景变暗,并附加手势识别器来处理拉动和解除。

您可以使用本教程开始使用UIPresentationController。您也可以从那里获取代码并根据您的需要进行调整:https://www.raywenderlich.com/915-uipresentationcontroller-tutorial-getting-started

【讨论】:

感谢您的回答!

以上是关于我应该将底部工作表作为子视图添加到当前视图控制器还是推送添加了子视图的 UIWindow?的主要内容,如果未能解决你的问题,请参考以下文章

弹出框控制器的固定子视图,里面有一个表视图

如何快速管理作为子视图的表视图

将视图的顶部和底部约束到相同的准则以集中它,它应该工作吗?

ios7将刷新控件添加到表视图作为子视图后,它增加了额外的空间

UIViewController 的视图层次结构

如何将视图 XIB 作为子视图加载到视图控制器 XIB 中