提问者:小点点

UIScrollView可滚动内容大小不明确


各位开发人员,我在Interface Builder(Xcode5/iOS 7)中遇到了自动布局的问题。这是非常基本和重要的,所以我认为每个人都应该知道这是如何运作的。如果这是Xcode中的一个bug,那就是一个关键的bug!

因此,每当我有这样的视图层次结构时,我就会遇到麻烦:

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

UIScrollView有坚实的约束,例如,每边50像素(没有问题)。然后我将顶部空间约束添加到UILabel(没问题)(我甚至可以钉入标签的高度/宽度,什么也不改变,但是由于标签的固有大小,应该是不必要的)

当我向UILABEL添加一个尾随约束时,问题就开始了:

例如:Superview的尾随空格等于:25

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

A.可滚动内容大小不明确(滚动视图具有不明确的可滚动内容高度/宽度)

B.错位的视图(标签应为:x=-67实际:x=207

null

请注意:如果您将UIScrollView替换为UIView,则行为与预期一致(label's frame是正确的,并且符合约束)。所以似乎要么是UIScrollView出了问题,要么是我错过了一些重要的东西。

当我运行应用程序时,没有按照IB的建议更新标签的框架,它的位置就很好,正好在它应该在的位置,并且UIScrollView是可滚动的。如果我确实更新了框架,标签就看不到了,并且UIScrollView不会滚动。

帮帮我欧比万·克诺比!为什么布局模棱两可?为什么会有错位的看法?

您可以在这里下载示例项目,并尝试是否能够找出正在发生的事情:https://github.com/wirsing84/autolayoutproblem


共3个答案

匿名用户

所以我就这样整理了一下:

> 中添加一个(我们可以称之为

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

完成了。

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

更新:

@sergio在下面的评论中发布的这段视频涵盖了一些特殊情况。

匿名用户

Xcode 11+

使用:

    并将其固定到superview(或您所需的大小)/li> ,将其固定到所有4条边,并将其居中 优先级更改为250。(用于水平滚动更改
  1. 选择,选择大小检查器并取消选择

匿名用户

这个错误花了我一段时间来追踪,最初我尝试固定ScrollView的大小,但错误信息清楚地显示“Content size"。我确保所有我从滚动视图顶部固定的东西也固定在底部。这样,ScrollView就可以通过查找所有对象的高度来计算其内容高度&;制约因素。这就解决了模棱两可的内容高度,宽度相当相似。。。最初,我在ScrollView中的大部分内容都是以X为中心的,但我还必须将对象钉在ScrollView的侧面。我不喜欢这样,因为iPhone6的屏幕可能会更宽,但它会消除“内容宽度模糊”的错误。