无论大型contentSize如何,UIScrollView都不会滚动

gol*_*ove 10 objective-c uiscrollview ios contentsize

我创建了一个UIScrollView并在Interface Builder中添加了子视图,但是我无法滚动它.我看过其他类似的问题,但我已经适当地设置了我的contentSize.事实上,我甚至尝试过设置令人难以置信的大型内容,但它无法发挥作用.我错过了什么?请注意,UIScrollView是一个IBOutlet:

@property (strong, nonatomic) IBOutlet UIScrollView *scroll;
Run Code Online (Sandbox Code Playgroud)

这是在我的viewDidLoad中:

self.scroll.scrollEnabled = YES;
[self.scroll setContentSize: CGSizeMake(2400,8000)];
Run Code Online (Sandbox Code Playgroud)

以下是Interface Builder的屏幕截图:

查看heirarchy

scrollview及其在界面构建器中的子视图

引用插座

这是运行时的视图,但任何时候在水平或垂直滚动​​的任何尝试都不起作用.

跑步时的屏幕

Enr*_*tyo 23

关闭自动布局工作,但这不是解决方案.如果您确实需要自动布局,请使用它,如果您不需要,请将其关闭.但这不是解决方案的正确方法.

UIScrollView与Auto Layout中的其他视图的工作方式不同.这是Apple关于Auto Layout 的发行说明,我复制了有趣的内容(强调我的,在第三个要点):

以下是有关UIScrollView的Auto Layout支持的一些注意事项:

  • 通常,"自动布局"会将视图的顶部,左侧,底部和右侧边缘视为可见边缘.也就是说,如果将视图固定到其超视图的左边缘,则实际上将其固定到超视图边界的最小x值.更改超级视图的边界原点不会更改视图的位置.
  • UIScrollView类通过更改其边界的原点来滚动其内容.要使其与"自动布局"一起使用,滚动视图中的顶部,左侧,底部和右侧边缘现在表示其内容视图的边缘.
  • 滚动视图的子视图上的约束必须导致填充大小,然后将其解释为滚动视图的内容大小.(这不应与用于自动布局的intrinsicContentSize方法混淆.)要使用自动布局调整滚动视图的框架大小,约束必须明确关于滚动视图的宽度和高度,或者滚动视图的边缘必须是与其子树之外的视图相关联.
  • 请注意,通过在视图和滚动视图子树外部的视图(例如滚动视图的超级视图)之间创建约束,可以使滚动视图的子视图显示为浮动(不滚动)在其他滚动内容上.

然后Apple继续展示如何正确使用UIScrollView自动布局的示例.

作为一般规则,最简单的解决方法之一是在元素与UIScrollView底部之间创建约束.因此,在您希望位于UIScrollView底部的元素中,创建此底部空间约束:

在此输入图像描述

再一次,如果您不想使用自动布局,请将其关闭.然后,您可以设置contentSize通常的方式.但您应该了解的是,这是自动布局的预期行为.