UIScrollView可滚动内容大小歧义

各位开发者,我在Interface Builder(Xcode 5 / iOS 7)中遇到了AutoLayout问题。 这是非常基本和重要的,所以我认为每个人都应该知道这是否正常工作。 如果这是Xcode中的一个错误,那么这是一个关键问题!

所以,无论何时我有这样的视图层次结构,我都会遇到麻烦:

>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)

UIScrollView有严格的约束条件,例如,每边都有50 px(没问题)。 然后我向UILabel添加顶部空间约束(没问题)(我甚至可以固定标签的高度/宽度,不会改变任何内容,但由于标签的固有尺寸而不需要)

当我向UILabel添加一个尾随约束时,麻烦就开始了:

例如,拖尾空间:Superview等于:25

现在发生了两个警告 - 我不明白为什么:

A)可滚动内容大小歧义(滚动视图具有模糊的可滚动内容高度/宽度)

B)放置错位的视图(标签预期:x = -67实际值:x = 207

我在一个新的项目中做了这个最小的例子,你可以下载并附上截图。 如您所见,Interface Builder希望Label位于UIScrollView边界之外(橙色的虚线矩形)。 使用“解决问题工具”更新标签的框架会将其移至此处。

请注意:如果用UIView替换UIScrollView,则行为与预期的一样(标签的框架是正确的并且根据约束)。 所以这似乎是UIScrollView的一个问题,或者我错过了一些重要的东西。

当我按照IB建议的方式运行应用程序而未更新标签的框架时,它定位得很好,确切地说它应该在哪里,UIScrollView是可滚动的。 如果我更新框架的标签是看不见的和UIScrollView不滚动。

帮助我Obi-Wan Kenobi! 为什么模糊的布局? 为什么错位观点?

你可以在这里下载示例项目,并尝试如果你能弄清楚发生了什么:https://github.com/Wirsing84/AutoLayoutProblem

Interface Builder中的问题说明


所以我就这样整理:

  • UIScrollView 添加一个UIView (我们可以调用contentView );

  • 在这个contentView将顶部,底部,左侧和右侧边距设置为0 (当然是从scrollViewsuperView ); 设置也水平和垂直对齐中心 ;

  • 完成

    现在,您可以在contentView添加所有视图,并且scrollViewcontentSize将根据contentView自动调整大小。

    更新:

    @Sergio在以下评论中张贴的视频介绍了一些特殊情况。


    这个错误花了我一段时间来追查,最初我试图固定ScrollView的大小,但错误信息清楚地表明“内容大小”。 我确定我从ScrollView的顶部固定的所有东西都固定在底部。 这样ScrollView就可以通过查找所有对象和约束的高度来计算其内容高度。 这解决了含糊不清的内容高度,宽度非常相似......最初,我在ScrollView中拥有大部分事物X,但我还必须将对象固定到ScrollView的一侧。 我不喜欢这样做,因为iPhone6可能有更宽的屏幕,但它会消除'模棱两可的内容宽度'错误。


    这是我自己回答的问题的答案UIScrollView +集中视图+ Ambigous可滚动内容大小+许多iPhone大小。

    但它也完全覆盖你的情况!

    所以,这里是最简单情况的初始状态:

  • scrollView对所有边都有0个约束
  • 按钮居中水平和垂直固定宽度和高度约束
  • 当然 - 烦人的警告 Has ambiguous scrollable content widthHas ambiguous scrollable content height
  • 1

    所有,我们必须做的是:

  • 添加2个额外的约束条件,例如对于我们的视图尾随和/或底部空间为“0”(查看下面截图中的示例)。
  • 重要提示:您必须添加尾部和/或底部约束。 不是“领先和顶尖” - 它不起作用!

    2

    你可以在我的示例项目中查看它,演示如何解决这个问题。

    PS

    根据逻辑 - 这个行为应该导致“冲突约束”。 但不是!

    我不知道它为什么会起作用以及Xcode如何检测哪个约束更优先(因为我没有将这些约束设置为优先级)。 我会很感激,如果有人解释,为什么它在下面的评论中起作用。

    链接地址: http://www.djcxy.com/p/28287.html

    上一篇: UIScrollView Scrollable Content Size Ambiguity

    下一篇: UIPageViewController + Auto Layout rotation issue