根据 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 以编程方式创建控制器无法正确调整视图大小
在 Objective-C 中以动态和编程方式调整 UIView 的大小