具有自动布局模糊高度的 UIScrollView

UIScrollView with Autolayout Ambigous height

我已经阅读了很多关于垂直滚动的 ScrollViews 的 manuals/tutorials,但到目前为止还没有想出如何解决我的问题。

你可以在这里看到我的 ScrollView 视觉计划:

ScrollView plan

Whosebug 上最有帮助的答案在这里:

据此,我做了以下内容:

我的 ScrollView(在我的屏幕截图上标记为红色)有 0,0,0,0 个约束并且与 ViewController 的视图宽度相等。在我的 ScrollView 中,我制作了一个 ContentView(在我的屏幕截图中为橙色),其中包含(在我的屏幕截图中为绿色):

1) 具有恒定高度并固定 top/left/right 到 ContentView 的 ImageView。

2) 具有恒定高度的视图并将顶部固定到 ImageView,left/right 固定到 ContentView。

3) 具有恒定高度的视图并将顶部固定到其上方的视图,left/right 固定到 ContentView。

4) TextView 将顶部固定到其上方的视图,left/right 固定到 ContentView,固定底部 到 ContentView。

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

但是我从情节提要中得到了错误,告诉我:需要约束:Y 位置或高度。

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

谢谢!

我刚刚发现,我必须取消选中文本字段上的 "Enable scrolling"。有道理。

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

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

举例来说,您将每个高度约束设置为 100,固定约束有 20 个 space 值,内容视图中每个子视图的框架将如下所示:

  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, ??)

由于您的 textView 有上下约束,它的高度会变化,内容视图的高度也会根据 textView 的高度而变化。

然而,textView 也有滚动特性,如果没有额外的约束,这将很难计算它与内容视图相关的高度。

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

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