在autolayout中缺少约束x和UIScrollView的高度

Kal*_*zem 6 xcode uiscrollview uiview ios autolayout

免责声明:我看到了一种SO技术,其中包括向UIScrollView添加UIView(称为contentView)并将所有内容放到此contentView中.我不想使用这种技术,因为我想了解为什么我遇到了当前的问题.

我在UIViewController的默认UIView上有一个UIScrollView,它的UIScrollView有4个约束:每边一个(尾部,顶部,前导,底部),所以它粘贴到它的父UIView. 这有效!

使用UIScrollView约束

但是当我想在UIScrollView中添加一个UIImageView并希望它粘贴到它的父边(尾随,顶部,前导)+特定高度时,现在我遇到了问题.

不工作的UIImageView约束

它说:

Scroll View: Has ambiguous scrollable height
Scroll View: Needs constraints for: X position or width
Run Code Online (Sandbox Code Playgroud)

小智 7

xcode抛出这些错误的原因是因为它无法在运行时计算UIScrollViewUIImageView构造.

当您UIScrollView为其超级视图添加相关的约束时,它会告诉xcode绘制与其超级视图一样大的滚动视图.但是,当您添加UIImageViewUIScrollView大小相关的约束时,它会告诉xcode绘制与UIScrollView内容大小一样大的图像视图.请注意,UIScrollView尺寸和内容大小是两回事.

如果我们把它想象成一个房子,滚动视图大小基本上是窗口大小,它是一个大小,你可以用它来看到房子的内部.内容大小是房子的大小.这就是滚动视图的大小和内容大小之间没有关系的原因.

您可以通过两种方式解决问题,首先通过编程方式或使用IB设置滚动视图内容大小.虽然,我不确定如果以编程方式设置它会使警告静音.您可以按照此处的答案在IB中进行设置.第二种方法涉及为您的增加更多约束UIImageView.通过添加底部约束和宽度约束,xcode可以计算UIScrollView内容大小,这将删除此警告.