在 ScrollView 中嵌入 PageViewController - 以编程方式 Swift 5

Posted

技术标签:

【中文标题】在 ScrollView 中嵌入 PageViewController - 以编程方式 Swift 5【英文标题】:Embed PageViewController in ScrollView - Programmatically Swift 5 【发布时间】:2020-06-02 20:52:24 【问题描述】:

我有一个 PageViewController,它水平显示 4 个四个视图控制器,

我可以将所有这些 viewController 嵌入到 UIScrollView 中吗?管理一些任务会更容易。

到目前为止,我尝试在 PageViewController 中执行此操作,使 PageViewController 符合 UIScrollViewDelegate:

 for view in self.view.subviews 
            if let subView = view as? UIScrollView 
                subView.delegate = self
                subView.isScrollEnabled = true
                subView.bouncesZoom = false
        
    

但它实际上识别单个 ViewController 的滚动,而不是识别整个四个 VC 堆栈的滚动。 我想让 ScrollView 的 contentSize 等于所有 viewControllers 的整个宽度。

【问题讨论】:

不清楚你在问什么。你想要一个“水平页面视图控制器”作为垂直滚动滚动视图的一部分吗?或者你想要 4 个视图控制器的内容作为滚动视图的子视图? 我想实现您所说的第二个选项:但不是“4 个视图控制器作为滚动视图的子视图”,因为这实际上是我对上层代码所做的事情。相反,我想将所有视图控制器的全部内容嵌入到单个 ScrollView 中,这样我就可以跟踪可缩放内容的位置,并在我当前所在的 VC 所在的轨道上向上滑动按钮。 目前还不清楚您要做什么。在您的评论中,您说 "NOT "4 viewcontrollers as subviews of a scrollview"" ...但您还说 "我想将所有 viewcontrollers 的全部内容嵌入到单个 ScrollView ".如果您尝试编辑您的问题并用普通语言描述您想要做什么? 如果我在打印出 ScrollViewDidScroll 中的 scrollView 内容偏移量时将每个 View Controller 嵌入到滚动视图中:每次 ViewController 滚动阶段完成时它都会重新启动。我想要一个滚动视图,它通过 ViewControllers 持续跟踪运动 【参考方案1】:

您不能更改 UIPageViewController 到滚动视图。它已经一个滚动视图,但具有许多通过视图控制器进行内存管理分页的内置功能。

如果您的目标是将 4 个视图控制器放入滚动视图中:

创建一个新的(普通)UIViewController 添加 UIScrollView 并将其约束到所有 4 个边 在滚动视图中添加UIStackView(分布:均等填充) 将堆栈视图的所有 4 面约束到滚动视图的内容布局指南 将其高度限制为滚动视图的框架布局指南高度 将 4 个UIContainerViews 添加到堆栈视图中 将 4 个“页面”视图控制器中的每一个嵌入到 4 个容器中 将第一个容器的宽度限制为滚动视图框架布局指南的宽度

您现在拥有一个完整视图 UIScrollView,您可以在其中来回滚动浏览您的 4 个“页面”视图控制器。

【讨论】:

以上是关于在 ScrollView 中嵌入 PageViewController - 以编程方式 Swift 5的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 6 上使用自动布局在 ScrollView 中嵌入 ImageView

在 ScrollView 中嵌入 PageViewController - 以编程方式 Swift 5

启用自动布局时,在嵌入式 ScrollView 中未检测到滚动

Embedding UITableView 嵌入一个 ScrollView,嵌入一个 UIView

SwiftUI - 嵌入 ScrollView 后文本被截断

远程图像使用 List 正确加载,但在使用带有嵌入式 VStack 的 ScrollView 和 SwiftUI 时不加载