UIScrollView +中心视图+ Ambigous Scrollable内容大小+许多iPhone大小

时间:2014-10-08 16:17:58

标签: ios uiscrollview interface-builder autolayout xcode6

我有:

  • 应用程序,应该在横向和纵向模式下工作。
  • 在顶部查看全尺寸滚动视图。
  • 滚动视图内部的一些视图,具有固定的宽度和高度。 (添加了H和W约束)
  • 设置为在容器中以水平居中的方式查看滚动视图内部。 (根据约束添加)

我在界面构建器中有警告“具有不明确的可滚动内容宽度”。 enter image description here

我知道解决这个问题的唯一方法是设置尾随和前导约束。 但对于不同的iPhone(5.5“,4.7”,4“),我需要设置不同的尾随和前导约束。

如何消除此警告,并且对于所有iPhone尺寸,仍然使用固定的W和H居中水平视图?

我创建了Github repo来说明这个问题:ScrollViewAmbigous

这与UIScrollView Scrollable Content Size Ambiguity不重复 ,但它相似(虽然没有回答),但这个问题尤其与不同尺寸的iPhone有关。

3 个答案:

答案 0 :(得分:46)

早上喝了一杯新鲜的咖啡,我找到了解决这个问题的方法!

因此,这是最简单情况的初始状态:

  1. 每个边缘都有0个约束的scrollView
  2. 按钮居中水平和垂直,固定宽度和高度
  3. 当然还有Has ambiguous scrollable content widthHas ambiguous scrollable content height 恼人的警告
  4. 1

    所有,我们要做的是:

    • 添加2个附加约束,例如“0”表示我们视图的尾随和/或底部空间(在我的情况下 - UIButton)

    重要提示:您必须添加尾随和/或底部约束。不是“领先和顶级” - 它不起作用!

    2

    您可以在我的示例项目中查看它,演示如何解决此问题:ScrollViewAmbigous

    <强> P.S。

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

答案 1 :(得分:8)

问题

  1. 警告告诉我们内容的大小 scrollview取决于其子视图。
  2. 虽然你的子视图没有任何严格的位置和大小规则(没有固定的约束),但它会混淆nib生成的scrollview 内容大小。
  3. 解决方案

    1. 只将一个子视图设为&#39; contentView&#39;滚动视图。
    2. 为内容视图&#39;添加严格(固定)约束。

      最佳做法:滚动视图的宽度和高度相等。

    3. 将所有其他子视图和约束添加到您的内容视图&#39;。

答案 2 :(得分:0)

在这个问题上似乎存在很多混乱。我的看法是UIScrollView必须具有两个尾随空间约束,一个“内部”约束将其连接到其中一个子视图(因此它可以知道其内容宽度),另一个“外部”连接它到兄弟或超级视图,所以它知道它的框架宽度。

同样的原则适用于高度,即两个底部空间约束。