ios - UIScrollView 中的子视图控制器
问题描述
我有一个带有 3 个子视图控制器和一个UIScrollView
在主视图中的视图控制器。VerticalScrollViewController 的设置代码如下。
func setupScrollView() {
scrollView = UIScrollView()
scrollView.isPagingEnabled = true
scrollView.showsVerticalScrollIndicator = false
scrollView.bounces = false
let view = (
x: self.view.bounds.origin.x,
y: self.view.bounds.origin.y,
width: self.view.bounds.width,
height: self.view.bounds.height
)
scrollView.frame = CGRect(x: view.x, y: view.y, width: view.width, height: view.height)
scrollView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(scrollView)
// These constraints don't seem to affect it and I did try and set the scroll view constraints to the parent views safe area, but that did not work either
NSLayoutConstraint.activate([scrollView.topAnchor.constraint(equalTo: self.view.topAnchor),
scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
scrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
scrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)])
let scrollWidth: CGFloat = view.width
var scrollHeight: CGFloat
scrollHeight = 3 * view.height
topVc.view.frame = CGRect(x: 0, y: 0, width: view.width, height: view.height)
middleVc.view.frame = CGRect(x: 0, y: view.height, width: view.width, height: view.height)
bottomVc.view.frame = CGRect(x: 0, y: 2 * view.height, width: view.width, height: view.height)
addChild(topVc)
addChild(middleVc)
addChild(bottomVc)
scrollView.addSubview(topVc.view)
scrollView.addSubview(middleVc.view)
scrollView.addSubview(bottomVc.view)
topVc.didMove(toParent: self)
middleVc.didMove(toParent: self)
bottomVc.didMove(toParent: self)
scrollView.contentOffset.y = middleVc.view.frame.origin.y
scrollView.contentSize = CGSize(width: scrollWidth, height: scrollHeight)
}
由于某种原因,视图在顶部偏移了大约 50 个点。我的意思是我的视图控制器的视图从所选滚动视图框架的视图的最顶部开始。这会导致 iPhone X 及更高版本上的缺口覆盖其中的一部分。
我的问题是:如何将 3 个视图控制器添加到我的滚动视图并将顶部与 UIScrollView 安全区域对齐?
我尝试激活所有 3 个 VC UIViews 的约束,但这并没有按预期工作。很好,middleVc
但是当我滚动时,顶部和底部只是滑到middleVc
UIView后面。我确信这是我在约束方面缺少的东西,但我无法使用视图调试器来确定哪些约束以及我应该在哪里添加它们。我在这里查看了一些关于 SO 的问题,但其中大多数都涉及故事板,我正在以编程方式完成所有工作。
解决方案
推荐阅读
- asp.net - 错误“连接被对方断开”后出现很多错误
- vb.net - DateTimepicker 在我的 mdf 数据库文件中插入了错误的格式
- tensorflow - factorized_top_k 使用 tensorflow 推荐器
- python - RequestTimeTooSkewed:在线程中运行时,boto3 上传有时会失败
- c - 如果选择超时,套接字会发生什么
- flask - 尝试使用flask和jinja2在文件夹中显示随机图像,但当前显示的是不在文件夹中的不同文件
- angular - 当jwt访问令牌使用角度过期时如何自动注销应用程序?
- javascript - P5.js 无法在 Safari 上运行,控制台中没有错误
- html - 如何在手机上边到边显示图像
- python - itemloader add_value 列表的 Scrapy 问题