使用Storyboard基于内部内容的UIScrollView的contentView的高度

Tom*_*det 15 objective-c uiscrollview ios xcode-storyboard

我实际上面临的困难是UIScrollView只使用故事板限制来完全响应.

这是我的层次结构:

> - UIViewController
>  - UIView
>   - UIScrollView
>    - contentView
>     - module1View
>     - module2View
>     - module3View
Run Code Online (Sandbox Code Playgroud)

所有模块都用于显示图表.我希望他们能够做出回应.我希望它们的宽度为屏幕的100%,并且它们的高度由使用约束添加的比率定义.模块彼此相邻显示,就像新闻源中的新闻一样.

我的问题是:如何设置contentView高度等于所有模块的总和(模块1 + 2 + 3)?

换句话说,我想实现:

  • top of contentView =模块1的顶部
  • 模块2的顶部=模块1的底部
  • 模块2的顶部=模块2的底部
  • contentView的底部=模块3的底部

为了做到这一点,我按照在互联网上找到的一些教程.以下是我遵循的步骤:

  1. 设定UIScrollView约束以定义其位置和位置.
  2. 将UIScrollView 顶部,底部,左侧和右侧间距设置为最近邻居为0.
  3. 在模块之间设置约束以将它们"堆叠"在一起.
  4. (我在这里阻止)设置contentView模块3底部的底部以允许UIScrollview滚动直到结束内容.

我试图强迫UIScrollView它的高度:它有效,但没有响应.由于模块的高度是通过比率计算的,取决于设备,高度"模块1 + 2 + 3"在变化时.

我试图从模块3添加一个约束contentView来设置模块3 =底部的底部contentView.所有约束都变成红色并且随处可见警告.

您是否知道如何contentView根据响应内容设置高度?(就像"以某种方式包装内容").

在此先感谢您的帮助!

Dan*_*all 48

我已经能够通过故事板,无代码获得动态滚动视图,具有以下步骤:

1)在故事板中,添加滚动视图并将其边缘约束到主视图的边缘或以任何适当的方式

2)在滚动视图中,添加一个普通的旧UIView作为容器.将它约束到滚动视图的所有4个边缘,但是相对于滚动视图添加相等的宽度约束,并且向滚动视图添加相等的高度约束

3)非常重要:为等高约束设置低优先级,例如250.

4)在步骤2中添加的容器视图内,添加3个模块.将第一个模块的上边缘约束到容器视图的顶部,将最后一个模块的下边缘约束到容器视图的底部,并将所有中间模块约束到链中的前一个模块.这应该会在容器视图中为您提供完整的垂直约束链.您还需要为每个模块添加任何适当的x定位/宽度设置约束.

5)建立并运行!您的滚动视图内容大小应自动等于所有模块的总高度加上它们之间的间距,并且动态更改模块内容将通过自动布局更新滚动视图内容大小,而不是需要显式代码来计算和更新.