我有:
-
应用程序,应该在横向和纵向模式下工作 .
-
视图,顶部有全尺寸滚动视图 .
-
滚动视图内部的一些视图,具有固定的宽度和高度 . (增加了H和W约束)
-
设置为在容器中以水平居中的方式查看滚动视图内部 . (根据约束添加)
我在界面构建器"Has ambiguous scrollable content width"中有警告 .
我知道解决这个问题的唯一方法是设置尾随和前导约束 . 但是对于不同的iPhone(5.5“,4.7”,4“),我需要设置不同的尾随和前导约束 .
如何消除此警告仍然具有固定W和H的所有iPhone尺寸的水平视图居中?
我创建Github repo来说明这个问题:ScrollViewAmbigous
这不是UIScrollView Scrollable Content Size Ambiguity的重复,但它类似(虽然没有回答),但这个问题尤其与不同尺寸的iPhone有关 .
3 回答
早上喝了一杯新鲜的咖啡,我找到了解决这个问题的方法!
所以,这是最简单情况的初始状态:
scrollView对所有边都有0个约束
按钮居中水平和垂直,固定宽度和高度
当然
Has ambiguous scrollable content width
和Has ambiguous scrollable content height
annoying warnings .所有,我们要做的是:
Important: 您必须添加 trailing and/or bottom 约束 . 不"leading and top" - 它不起作用!
您可以在我的示例项目中检查它,演示如何解决此问题:ScrollViewAmbigous
P.S.
我不知道为什么它的工作原理以及Xcode如何检测哪个约束更优先(因为我没有为这些约束明确设置优先级),但如果有人解释,为什么它在下面的评论中起作用,我会感激不尽 .
Problem :
警告告诉我们,scrollview的内容大小取决于其子视图 .
虽然您的子视图没有任何严格的位置和大小规则(没有固定约束),但它会混淆nib生成的scrollview内容大小 .
Solution :
仅为scrollview创建一个子视图作为'contentView' .
为'contentView'添加严格(固定)约束 .
最佳实践:滚动视图的宽度和高度相等 .
在这个问题上似乎存在很多混乱 . 我的看法是UIScrollView必须有 TWO 尾随空间约束,'inner'将它连接到其中一个's subviews (so it can know its content width), and another ' outer'将它连接到兄弟或超级视图,以便它知道它的帧宽 .
相同的原理适用于高度,即两个底部空间约束 .