我正在开发一个自定义scrollView,它通过分页显示不同类型的不同视图。
for view in views {
view.frame = frame
frame.origin.x += width
}
contentViewWidth.constant = width * CGFloat(pages.count)
self.setNeedsUpdateConstraints()
适用于任何类型的自定义视图子类。
现在我必须将ViewController添加为“page”,但要执行:
parentViewController?.addChildViewController(containedViewController)
let width = scrollView.frame.size.width
let height = scrollView.frame.size.height
var frame = CGRect(x: 0, y: 0, width: width, height: height)
containedViewController.view.frame = frame
pages.append(containedViewController.view)
contentView.addSubview(containedViewController.view)
containedViewController.didMove(toParentViewController: parentViewController)
设置时我得到了正确的框架,错误检查完整的滚动视图我得到一个完全随机的框架大小。 我在7plus,su 414宽度上使用scrollview全屏,但我总是得到一个宽度为>的视图。 500 px。
我缺少什么?
答案 0 :(得分:1)
总是更好地添加UIView
作为容器视图,并将viewController.view
的框架设置为该框架。 viewController.view.frame
因某些原因而变得混乱,特别是在旋转/动态布局上......所以试试
parentViewController?.addChildViewController(containedViewController)
let width = scrollView.frame.size.width
let height = scrollView.frame.size.height
let frame = CGRect(x: 0, y: 0, width: width, height: height)
let containerView = UIView(frame:frame)
//potentially add flexible width and height
containedViewController.view.autoresizingMask = [.flexibleWidth,.flexibleHeight]
containedViewController.view.frame = containerView.frame
pages.append(containerView) // assuming this is an array of the views inside the scrollview I'd change that to containerView as well.. bit of a guess though.
containerView.addSubview(containedViewController.view)
contentView.addSubview(containerView)
containedViewController.didMove(toParentViewController: parentViewController)