错误的框架将ViewController视图添加为子视图

时间:2016-11-17 16:50:52

标签: ios swift swift3

我正在开发一个自定义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。

我缺少什么?

1 个答案:

答案 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)