【问题标题】:How to make subviews resize to UIScrollView ContentSize?如何使子视图调整为 UIScrollView ContentSize?
【发布时间】:2017-10-13 12:46:25
【问题描述】:

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

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

我这样设置我的 contentSize:

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

这可以让我水平滚动 UIViewController 视图。

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

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 视图就像全屏视图偏移一样,因此您看不到视图的底部,因为屏幕底部会将它们截断。

【问题讨论】:

  • 如果您发布您正在使用的实际代码,或者至少发布一个运行并演示问题的精简版本,这将更容易提供帮助。查看您发布的代码,看起来您将panelViewController.view 的高度设置为view 的高度,而您可能希望将其设置为scrollView ...或panelView 的高度,这变为panelViewController.view的superview。 (使用不那么容易混淆的名称和添加 cmets 也有帮助。)

标签: ios swift uiviewcontroller uiscrollview nslayoutconstraint


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多