UIScrollView与Autolayout Ambigous height

时间:2015-11-29 15:59:55

标签: ios swift uiscrollview autolayout ios-autolayout

我已经在ScrollViews上阅读了很多关于垂直滚动的手册/教程,但到目前为止还没有弄清楚如何解决我的问题。

您可以在此处查看我的ScrollView可视化计划:

ScrollView plan

最有用的答案就在这里,在StackOverflow上: https://stackoverflow.com/a/30282707/3718319

根据它,我做了以下事项:

我的ScrollView(我的屏幕截图上的红色)已经获得了0,0,0,0个约束,并且与ViewController的视图具有相同的宽度。在我的ScrollView中,我制作了一个ContentView(我的屏幕截图上的makred orange),其中包含(在我的屏幕截图上显示为绿色):

1)ImageView具有恒定高度并固定在ContentView的顶部/左/右。

2)以恒定高度查看并将顶部固定到ImageView,左/右固定到ContentView。

3)以恒定高度查看并固定在其上方的视图上,左/右到ContentView。

4)TextView固定在其上方的视图顶部,左/右连接到ContentView,固定底部固定到ContentView。

因此,所有垂直约束都已设置,我的可滚动内容高度应根据文本视图的高度而变化。这就是我的目标。

但我从故事板中得到错误,告诉: 需要约束:Y位置或身高。

你能帮我解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

故事板抛出这些警告的原因是因为它无法计算滚动视图的内容大小。使用内容视图中的第一组约束,它具有不明确的高度。

例如,假设您将每个高度约束设置为100,并且固定约束具有20个空格值,内容视图中每个子视图的框架将如下所示:

  1. ImageView(20,20,view.Width,100)
  2. 查看(20,140,view.Width,100)
  3. 查看(20,260,view.Width,100)
  4. TextView(20,380,view.Width,??)
  5. 由于textView具有顶部和底部约束,因此它的高度会有所不同,内容视图的高度也会因textView高度而异。

    然而,textView也有滚动功能,这将使得在没有额外约束的情况下很难计算与内容视图相关的高度。

    由于你在textView中禁用了它的滚动功能,故事板在计算每个子视图帧时不再有任何困难,这就是警告消失的原因。

    可选地,您可以启用textView的滚动功能并为其提供高度约束,这将为故事板提供足够的信息来计算每个子视图帧。

答案 1 :(得分:2)

我刚想通了,我必须在我的文本字段中取消选中“启用滚动”。这是有道理的。

我之前已经尝试过,但在我从头开始制作这个故事板ViewController之前,它没有帮助我。