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
所以我就这样整理:
在UIScrollView
添加一个UIView
(我们可以调用contentView
);
在这个contentView
, 将顶部,底部,左侧和右侧边距设置为0 (当然是从scrollView
的superView
); 设置也水平和垂直对齐中心 ;
完成 。
现在,您可以在contentView
添加所有视图,并且scrollView
的contentSize
将根据contentView
自动调整大小。
更新:
@Sergio在以下评论中张贴的视频介绍了一些特殊情况。
这个错误花了我一段时间来追查,最初我试图固定ScrollView的大小,但错误信息清楚地表明“内容大小”。 我确定我从ScrollView的顶部固定的所有东西都固定在底部。 这样ScrollView就可以通过查找所有对象和约束的高度来计算其内容高度。 这解决了含糊不清的内容高度,宽度非常相似......最初,我在ScrollView中拥有大部分事物X,但我还必须将对象固定到ScrollView的一侧。 我不喜欢这样做,因为iPhone6可能有更宽的屏幕,但它会消除'模棱两可的内容宽度'错误。
这是我自己回答的问题的答案UIScrollView +集中视图+ Ambigous可滚动内容大小+许多iPhone大小。
但它也完全覆盖你的情况!
所以,这里是最简单情况的初始状态:
Has ambiguous scrollable content width
和Has ambiguous scrollable content height
。 所有,我们必须做的是:
重要提示:您必须添加尾部和/或底部约束。 不是“领先和顶尖” - 它不起作用!
你可以在我的示例项目中查看它,演示如何解决这个问题。
PS
根据逻辑 - 这个行为应该导致“冲突约束”。 但不是!
我不知道它为什么会起作用以及Xcode如何检测哪个约束更优先(因为我没有将这些约束设置为优先级)。 我会很感激,如果有人解释,为什么它在下面的评论中起作用。
链接地址: http://www.djcxy.com/p/28287.html