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

时间:2015-11-22 21:17:05

标签: ios xcode uiview uiscrollview autolayout

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

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

Working UIScrollView constraints

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

Non working UIImageView constraints

它说:

Scroll View: Has ambiguous scrollable height
Scroll View: Needs constraints for: X position or width

3 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:3)

为了解决这个问题,我做了以下事情:  1.插入滚动视图。从各个方向给Superview带来限制  2.在Scrollview内部,我添加了另一个UIView。然后,我向Superview添加了类似的限制,从各个方向到UIView。除此之外,我给它垂直居中对齐和水平居中对齐。这消除了约束错误。

答案 2 :(得分:0)

这对我有用。

在storyborad

中执行以下操作
  • 在滚动视图中添加隐藏的高度视图,位于0,0。
  • 向隐藏视图添加约束,top = 0,left = 0,right = 0,bottom = 0。
  • 在此隐藏视图上添加约束,使其水平居中于滚动视图。

这应该照顾滚动视图抱怨x位置。