根据 contenView 大小以编程方式调整滚动视图的大小 [Swift]

Posted

技术标签:

【中文标题】根据 contenView 大小以编程方式调整滚动视图的大小 [Swift]【英文标题】:Resize scrollView programmatically according to contenView size [Swift] 【发布时间】:2020-04-21 12:51:05 【问题描述】:

在我的应用程序中,我尝试根据内容创建自动调整大小的滚动视图,这是我的意思的简化版本。 我知道我应该使用 contentView,但是这样不起作用!

    view.addSubview(mainScrollView)
    mainScrollView.addSubview(contentView)

    mainScrollView.anchorFor(superview: view) // .zero to all edges of view

    let view1 = UIView(frame: view.frame)
    view1.backgroundColor = .red

    let view2 = UIView(frame: view.frame)
    view2.backgroundColor = .brown
    view2.frame.origin.y = view1.frame.height

    mainScrollView.contentSize.height = 2 * view.frame.height

现在,如果我不指定 contentSize,只会出现红色视图。 我也试过这种方式:

    let contentView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height))
    contentView.translatesAutoresizingMaskIntoConstraints = false
    contentView.backgroundColor = .black

    contentView.fillSuperview() // .zero to scrollview edges, but it doesn't work
        .
        .
        .
    contentView.addSubviews(view1,view2)

如何根据可以更改的 contentView 大小调整自己的 scoll 视图,例如通过单击“展开”按钮,所有这些都以编程方式没有情节提要。 谢谢

【问题讨论】:

【参考方案1】:

添加所有subview后,您需要使用以下代码计算contentSize

let contentRect: CGRect = scrollView.subviews.reduce(into: .zero)  rect, view in
    rect = rect.union(view.frame)

scrollView.contentSize = contentRect.size

注意:

如果您的subview 动态添加和删除,请不要忘记调用它。

【讨论】:

不行,要不要让contentView的约束? 不,我们可以通过自动调整大小来做到这一点

以上是关于根据 contenView 大小以编程方式调整滚动视图的大小 [Swift]的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIScrollView 和 AutoLayout 以编程方式创建控制器无法正确调整视图大小

UIView 根据边缘调整大小

CollectionView 标头不会在自动旋转时调整大小

在 Objective-C 中以动态和编程方式调整 UIView 的大小

以编程方式为 safeArea 调整 collectionView

根据子视图的内容大小调整滚动视图