iOS ScrollView需要约束y位置或高度

Bio*_*aim 44 objective-c scrollview storyboard ios autolayout

-ViewController
--View
---ScrollView (Top,Bottom,Leading,Trailing spaces to superview set to 0)
----ContentView (Top,Bottom,Leading,Trailing spaces to superview set to 0, Width equals with View (ViewController's child))
-----Label1
-----etc...
Run Code Online (Sandbox Code Playgroud)

如果我为我的内容视图设置了一个特定的高度约束(例如1000),ScrollView工作正常,但我有一个1000的静态ContentView,这不是我的目标,因为我的contentView获得了动态内容,所以应该是内容的高度需要.

如果我删除了ContentView的高度约束,Xcode说:

Missing Constraints:
ScrollView need constraints for: Y position or height
Run Code Online (Sandbox Code Playgroud)

ScrollView实际上是固定在顶部和底部,所以我不知道为什么Xcode想要ScrollView的高度约束...

当我希望ContentView高度达到内容所需的高度时,正确的方法是怎样的?

Bha*_*odi 135

每当使用具有自动布局的ScrollView时,请始终遵循以下步骤,

  1. ScrollView约束:leadingSpace,topSpace,TrailingSpace,bottomSpace到superView并确保当你控制拖动以添加约束时通过按alt添加它以便约束将被设置为没有边距.

  2. 在滚动视图中添加UIView作为内容视图并设置其约束:leadingSpace,topSpace,trailingSpace,bottomSpace到ScrollView而不按alt按钮并将equalWidth设置为ScrollView.

  3. 无论您在此内容视图中添加哪些视图,都必须具有从上到下的约束,即所有视图都应具有垂直约束,因此contentView可以根据其中的内容计算自身所需的高度.

如果约束设置正确,那么scrollView将根据其中的组件自动设置其内容大小,您不需要手动设置内容大小,只有当容器视图中的组件不适合时,scrollView才会滚动否则它不会滚动.如果你想让它滚动,那么你需要从故事板检查Bounces Vertically属性以获得反弹效果.

注: 虽然您设定了约束,以滚动视图里面的成分,你会看到约束的警告,直到你从顶部组件的限制设置为一个底部,跳投记住,你的顶部组件应该有顶部约束(垂直约束),以上海华和底部的组件应该对超级视图具有底部空间约束.当满足时,所有警告最终都会消失.

ScrollView约束:

在此输入图像描述

ContainerView约束:

在此输入图像描述

  • 这个答案很棒!! 我终于明白了如何在ScrollView中正确设置约束,非常感谢 (2认同)
  • 一直在搜索这样的答案2年,解释了如何设置ScrollView的机制.拜. (2认同)

bkw*_*ero 7

Xcode 11

几个小时以来,我一直在关注这方面的几个教程,但它们似乎都不起作用。Xcode 11 似乎有一些更新,可以改变滚动视图与自动布局的工作方式。

  1. UIScrollView向视图添加 a并添加顶部、底部、前导和尾随约束。
  2. 将 a 添加UIView到滚动视图。我们将其称为内容视图。
  3. 将内容视图的顶部、底部、前导和尾随约束添加到滚动视图的内容布局指南。将约束设置为 0。
  4. 内容视图滚动视图的 Frame Layout Guide之间添加等宽约束。(不是滚动视图或主视图!)
  5. 临时向内容视图添加高度约束,以便您可以添加内容。确保所有内容都有顶部、底部、前导和尾随约束。
  6. 删除内容视图的高度约束。

    我在这个链接上找到了一个很好的教程。