如何使子视图调整大小到UIScrollView ContentSize?

时间:2017-05-14 18:35:51

标签: ios swift uiviewcontroller uiscrollview nslayoutconstraint

我有一个充当容器视图控制器的UIViewController。它有一个与屏幕宽度相同的UIScrollView,但它的高度小于屏幕的高度。

UIScrollView包含另外两个UIViewControllers的视图,这些视图可以水平滚动。

我将contentSize设置为:

scrollView.contentSize.width = self.view.bounds.width * 2

这样可以让我水平滚动浏览我的UIViewController视图。

以下是我如何将UIViewController视图添加到我的scrollView:

private func addPanel(viewController: UIViewController, panel: Panel) {

    let xOffset: CGFloat!
    switch panel {
    case .left:
        xOffset = 0.0
    case .right:
        xOffset = self.view.bounds.width
    }

    let panelView = UIView(frame: CGRect(x: xOffset, y: 0, width: self.view.bounds.width, height: self.scrollView.bounds.height))

    scrollView.addSubview(panelView)

    let panelViewController: UIViewController! = viewController

    var viewBounds = view.bounds
    viewBounds.height = panelView.bounds.height

    panelViewController.view.frame = view.bounds
    panelView.addSubview(panelViewController.view)
    addChildViewController(panelViewController)
    panelViewController.didMove(toParentViewController: self)
}

出于某种原因,UIViewController视图不会调整大小以适应UIScrollView的高度。

我应该以约束为基础吗?我该怎么做我已经挣扎了好几天而且不知所措。

基本上,UIViewController视图就像全屏视图偏移一样,因此您无法看到视图的底部,因为屏幕底部会将它们关闭。

1 个答案:

答案 0 :(得分:0)

我只是在不知道所有代码的情况下进行猜测,但有一个原因可能是在滚动视图布局之前添加了子视图控制器。

添加并设置子视图大小后,scrollview会将其大小调整为手机大小,但您永远不会更新子视图。

我的建议是将子视图控制器添加到滚动视图,但将框架设置代码移动到布局方法中,在该方法中您知道视图具有正确(可见)的框架/边界。

鉴于您在视图控制器中编写此内容,一种方法可能是-viewDidLayoutSubviews

希望这是有道理的,如果没有,请随时提出更多问题。