使用自动布局时计算UIScrollView的contentSize
这是一个关于某些有用的东西的快速问题,但可以写得更好。 我有一个UIScrollView
和一个放在里面的对象列表,一个在另一个之下。 一切都在viewDidLoad()
完成,对象的放置使用Auto Layout
。 这是我将UIScrollView
的contentSize
高度设置为适当值的方法。
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)
希望这有助于将来的某些人。