如何根据滚动视图中的内容/子视图设置UIScrollView的动态高度下面是我得到的输出:
4ngedf3f1#
我们可以使用自动布局,在滚动视图中使用内容视图,它可以固定在滚动视图上,高度和宽度约束与主视图相同。然后,如果我们希望高度动态变化,我们可以给高度约束一个较低的优先级,因此内容视图的高度将根据其固有的大小增加,因为它有子视图。参考链接:
axzmvihb2#
首先,您需要设置子视图高度约束0,然后计算数据高度(您要在子视图中设置),并简单地分配subview.heightConstraint.constant = data.height,然后您需要设置基于子视图高度的scrollView.contentsize:
0
subview.heightConstraint.constant = data.height
scrollView.contentsize
self.scrollView.contentSize = CGSize(width: self.scrollView.contentSize.width, height: self.subViewHeight.constant)
lb3vh1jj3#
对我来说,这一招奏效了(斯威夫特4)
scrollView.layoutIfNeeded() scrollView.isScrollEnabled = true scrollView.contentSize = CGSize(width: self.view.frame.width, height: scrollView.frame.size.height)
mitkmikd4#
在我的例子中,我必须用textView(和其他视图)构建一个scrollView,它必须动态地调整大小。在InterfaceBuilder中,我设置了最小高度和固定高度的约束。然后在构建时删除固定高度。这是按预期工作的。
mgdq6dx15#
您必须计算内容所需的高度(包括间距)。将该值指定为行的高度并刷新表格(或将表格与行分开)
watbbzwu6#
垂直滚动视图调整标签文本长度的示例:
let scrollView = UIScrollView() view.addSubview(scrollView) scrollView.translatesAutoresizingMaskIntoConstraints = false scrollView.heightAnchor.constraint(lessThanOrEqualToConstant: UIScreen.main.bounds.height / 2).isActive = true let bodyLabel = UILabel() scrollView.addSubview(bodyLabel) bodyLabel.translatesAutoresizingMaskIntoConstraints = false bodyLabel.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true bodyLabel.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true bodyLabel.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true bodyLabel.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true bodyLabel.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true let heightConstraint = bodyLabel.heightAnchor.constraint(equalTo: scrollView.heightAnchor) heightConstraint.priority = .defaultLow heightConstraint.isActive = true
hsgswve47#
将滚动视图的子视图的等宽和等高约束设置为主视图。在IB大小检查器中,将等高约束-优先级设置为低(250)x1c 0d1x
gfttwv5a8#
我喜欢将内容布局指南的heightAnchor和UIScrollView本身约束在一起:
heightAnchor
UIScrollView
scrollView.heightAnchor.constraint(equalTo: scrollView.contentLayoutGuide.heightAnchor).isActive = true
8条答案
按热度按时间4ngedf3f1#
我们可以使用自动布局,在滚动视图中使用内容视图,它可以固定在滚动视图上,高度和宽度约束与主视图相同。然后,如果我们希望高度动态变化,我们可以给高度约束一个较低的优先级,因此内容视图的高度将根据其固有的大小增加,因为它有子视图。
参考链接:
2)https://www.youtube.com/watch?v=6J22gHORk2I
axzmvihb2#
首先,您需要设置子视图高度约束
0
,然后计算数据高度(您要在子视图中设置),并简单地分配subview.heightConstraint.constant = data.height
,然后您需要设置基于子视图高度的scrollView.contentsize
:lb3vh1jj3#
对我来说,这一招奏效了(斯威夫特4)
mitkmikd4#
在我的例子中,我必须用textView(和其他视图)构建一个scrollView,它必须动态地调整大小。
在InterfaceBuilder中,我设置了最小高度和固定高度的约束。然后在构建时删除固定高度。
这是按预期工作的。
mgdq6dx15#
您必须计算内容所需的高度(包括间距)。将该值指定为行的高度并刷新表格(或将表格与行分开)
watbbzwu6#
垂直滚动视图调整标签文本长度的示例:
hsgswve47#
将滚动视图的子视图的等宽和等高约束设置为主视图。在IB大小检查器中,将等高约束-优先级设置为低(250)x1c 0d1x
gfttwv5a8#
我喜欢将内容布局指南的
heightAnchor
和UIScrollView
本身约束在一起: