【发布时间】:2020-07-20 08:23:34
【问题描述】:
如何以编程方式根据子视图的大小更改框架的高度?
scrollView.frame = CGRect(origin: scrollView.frame.origin, size: CGSize(width: scrollView.frame.width, height: scrollView.frame.height))
这是我为更改框架高度而编写的代码,但是即使我将高度设置为 1000,框架也不会改变。此外,我还尝试设置 scollView.contentSize 的高度。它只允许子视图能够在 scrollView 内滚动,并且不会改变高度。
这就是我编写代码的方式: Image
结果: Image
要显示的全图:Image
【问题讨论】:
-
您是否使用自动布局,这会阻止您更改框架?你如何设置滚动视图(frame 和 contentSize)?
-
是的,我使用的是自动布局。我拖动滚动视图,使其与屏幕宽度匹配并将高度设置为特定值(例如 200)。此外,我建立了对超视图的前导、顶部、尾随和底部的约束,值为 0。当然,我会收到一个错误,因为我没有设置内容大小,而且我不知道内容的大小(例如图像) 这将是。我将框架大小(仅高度)设置为与图像的 intrinsicContentSize 相似,并将内容大小设置为与框架具有相同的宽度和高度。
-
那么,您到底想实现什么?通常,您不会更改滚动视图的框架,而是修改 contentSize。请写你想要的,因为修改框架应该可以随时工作(除了自动布局;在这种情况下,你需要修改顶部和/或底部约束)
-
基本上我希望滚动视图用作图像滑块。我希望图像完全显示在屏幕上,并将
contentMode设置为 Aspect Fill。因此,滚动视图的高度将与要加载的图像的高度相似。对于宽度,它将基于我已经放大以匹配屏幕的滚动视图的大小。此外,滚动视图下还有一个长段落(文本视图),顶部约束为滚动视图,底部约束为安全视图。是不是因为这种限制而阻止框架不改变大小? -
因此,假设您的屏幕高度为 1000,滚动视图高度为 600,文本视图高度为 400。您要显示的图像高度为 2000,您显示的文本高度也为 2000 (确实是长文本)——你想要什么样的布局?为什么要更改滚动视图的高度?通常,高度保持不变,因此您只能看到图像 2000 像素(或任何单位)中的 600 个,如果您想查看其余部分,则必须滚动。文本相同,宽度相同。这是你想要的吗?