首页 文章

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

提问于
浏览
20

我有:

  • 应用程序,应该在横向和纵向模式下工作 .

  • 视图,顶部有全尺寸滚动视图 .

  • 滚动视图内部的一些视图,具有固定的宽度和高度 . (增加了H和W约束)

  • 设置为在容器中以水平居中的方式查看滚动视图内部 . (根据约束添加)

我在界面构建器"Has ambiguous scrollable content width"中有警告 .
enter image description here

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

如何消除此警告仍然具有固定W和H的所有iPhone尺寸的水平视图居中?

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

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

3 回答

  • 45

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

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

    • scrollView对所有边都有0个约束

    • 按钮居中水平和垂直,固定宽度和高度

    • 当然 Has ambiguous scrollable content widthHas ambiguous scrollable content height annoying warnings .

    1

    所有,我们要做的是:

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

    Important: 您必须添加 trailing and/or bottom 约束 . 不"leading and top" - 它不起作用!

    2

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

    P.S.

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

  • 8

    Problem

    • 警告告诉我们,scrollview的内容大小取决于其子视图 .

    • 虽然您的子视图没有任何严格的位置和大小规则(没有固定约束),但它会混淆nib生成的scrollview内容大小 .

    Solution

    • 仅为scrollview创建一个子视图作为'contentView' .

    • 为'contentView'添加严格(固定)约束 .

    最佳实践:滚动视图的宽度和高度相等 .

    • 将所有其他子视图和约束添加到'contentView' .
  • 0

    在这个问题上似乎存在很多混乱 . 我的看法是UIScrollView必须有 TWO 尾随空间约束,'inner'将它连接到其中一个's subviews (so it can know its content width), and another ' outer'将它连接到兄弟或超级视图,以便它知道它的帧宽 .

    相同的原理适用于高度,即两个底部空间约束 .

相关问题