无法将 UIContainerView 添加到 UIScrollView

Posted

技术标签:

【中文标题】无法将 UIContainerView 添加到 UIScrollView【英文标题】:Can't add UIContainerView to UIScrollView 【发布时间】:2017-06-29 11:08:55 【问题描述】:

我在故事板中添加了一个 UIScrollView,引用为:

@IBOutlet weak private var myScrollView: UIScrollView!

我想添加一个 UIViewController 所以需要一个容器视图。

在第一个实例中,我会添加一个带有黑色背景的简单 UIView(以查看它),因此将其添加到 ViewDidLoad:

let containerView = UIView()
    containerView.frame = CGRect(x: 50, y: 150, width: 200, height: 200)
    containerView.backgroundColor = UIColor.black
    myScrollView.addSubview(containerView) 

然后……什么都没有。

四处寻找我发现可以使用的解决方案

self.view.addSubview(myScrollView)

但是 1. myScrollView 肯定已经添加到视图中了吗? 和 2. 我无法在 myScrollView 中滚动新视图

谁能帮我克服这个最初的障碍?

【问题讨论】:

【参考方案1】:

为了滚动内容大小必须大于框架大小。

// If the scroll view is not showing, check its frame
scrollView.frame = CGRect(x: 0, y: 318, width: 375, height: 248)
// Content size must be greater than frame size
scrollView.contentSize = CGSize(width: 400, height: 500)

let containerView = UIView()
containerView.frame = CGRect(x: 50, y: 150, width: 200, height: 200)
containerView.backgroundColor = UIColor.black
scrollView.addSubview(containerView)

【讨论】:

【参考方案2】:

您的代码对我来说看起来不错。这是我自己运行时的样子。

回答您的问题

    将滚动视图的背景设置为另一种颜色,就像我正在做的那样。然后你就可以弄清楚出了什么问题。您必须将容器视图添加到滚动视图,而不是 self.view,它是视图控制器。如果您添加到self.View,您的容器视图将被固定到您的视图控制器,并且不会随着滚动视图滚动。它会覆盖滚动视图

    如果内容大小小于视图大小,则滚动视图无法滚动。也就是说,默认情况下它太短而无法滚动。因此,只需通过此代码使其更高

    scrollView.contentSize = CGSize(width: scrollView.contentSize.width, height: 2000)

【讨论】:

以上是关于无法将 UIContainerView 添加到 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

在 UIViewController 中嵌入 UIContainerView 作为屏幕的一部分

UIContainerView 内容高度(内嵌 UITableViewController)

奇怪的 UIContainerView 自动布局旋转行为

UIContainerView 中的 ChildViewController 在初始加载时高度错误

带有嵌入式 UITableViewController 的 UIContainerView 在 Xcode 5 (SDK 7) 上有灰色背景

UINavigationViewController 控件 UIContainerView 嵌入 segue