我应该将 bottom sheet 作为子视图添加到当前视图控制器,还是推送一个添加了子视图的 UIWindow?

Should I add bottom sheet as a subview to current view controller or push a UIWindow with the subView added?

我想根据图像实现底部 sheet。 底部会有平移手势上下拉

我困惑的是:

如果,我选择第二个选项我将如何在 pan 上更新 window?

您不应创建新的 UIWindow。通常一个 iOS 应用只有 1 个 window。我看到的两个最佳选择是:

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

  2. 如果sheet里面有更多的逻辑,或者sheet有可重复使用的,那么最好单独创建一个UIViewController这个。然后,您可以使用自定义动画和演示控制器来展示它。为此查看 UIViewControllerAnimatedTransitioningUIPresentationController

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

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