使用自动布局时计算UIScrollView的contentSize

这是一个关于某些有用的东西的快速问题,但可以写得更好。 我有一个UIScrollView和一个放在里面的对象列表,一个在另一个之下。 一切都在viewDidLoad()完成,对象的放置使用Auto Layout 。 这是我将UIScrollViewcontentSize高度设置为适当值的方法。

 override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) globalView.contentSize = CGSize(width: globalView.frame.width, height: globalView.frame.height * 1.59) } 

它有效,但任意值1.59显然是由我尝试了几个可能的值决定的。 在这种情况下计算contentSize的正确方法是什么? 我正在以编程方式做所有事情。 搜索网并没有让我得到任何简单明了的答案,所以虽然这可能是一个有点重复的问题,但我决定重新制定它。

以编程方式提供内容大小并不是一种好方法。 以下解决方案将使用autolayout工作,根本不需要设置内容大小。 它将根据添加到视图的UI字段数进行计算。

步骤1 :

添加Scrollview以在故事板中查看并添加前导,尾随,顶部和底部约束(所有值均为零)。

第2步 :

不要直接在scrollview上直接添加所需的视图,首先将一个视图添加到scrollview(这将是我们所有UI元素的内容视图)。 在此视图中添加以下约束。

1)前导,尾随,顶部和底部约束(所有值均为零)。

2)向主视图添加相等的高度,相等的宽度(即包含scrollview)。 对于相等的高度,设置优先级为低。 (这是设置内容大小的重要步骤)

3)此内容视图的高度将根据添加到视图的视图数量。 假设你添加的最后一个视图是一个标签,他的Y位置是420,高度是20,那么你的内容视图将是440。

第3步 :根据您的要求为您在内容视图中添加的所有视图添加约束。

以供参考 :

在此处输入图像描述

在此处输入图像描述

我希望这肯定会对你有所帮助。

虽然我终于解决了这个问题并使事情有效。 我注意到我在网上找到的所有相关答案都是针对故事板用户的。 但没有什么可以通过编程方式做到我可以把手放在上面。

所以我决定制作一个非常简单的演示应用程序,以展示如何实现这一目标。 我希望在某些时候对某人有用。

这是在GitHub上获取它的地址: https : //github.com/zaxonus/AutoLayScroll

我还以编程方式使用约束来动态修改UIScrollView的contentSize。 我几乎遵循了Shrikant的指示,但是对于步骤2.1,我将centerX设置为scrollViews.centerX而不是设置前导和尾随边距(不知道为什么前者有效,而后者没有)。 然后作为最后一步,在添加最终子视图后,我执行了以下操作:

 contentView.layoutIfNeeded() //set a frame based on constraints scrollView.contentSize = CGSize(width: contentView.frame.width, height: contentView.frame.height) 

希望这有助于将来的某些人。

Interesting Posts