不pipecontentSize大,UIScrollView都不滚动

我已经创build了一个UIScrollView,并在Interface Builder中添加了子视图,但是我无法滚动。 我看过其他类似的问题,但我已经适当地设置了我的contentSize。 事实上,我甚至尝试设置令人难以置信的大contentSize,并没有产生影响。 我错过了什么? 请注意,UIScrollView是一个IBOutlet:

@property (strong, nonatomic) IBOutlet UIScrollView *scroll; 

这是在我的viewDidLoad:

 self.scroll.scrollEnabled = YES; [self.scroll setContentSize: CGSizeMake(2400,8000)]; 

以下是Interface Builder的屏幕截图:

查看heirarchy

滚动视图及其在接口构建器中的子视图

参考出口

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

运行时屏幕

closures自动布局工作,但这不是解决scheme 。 如果你真的需要自动布局,那么使用它,如果你不需要它,closures它。 但这不是解决scheme的正确解决scheme。

在Auto Layout中, UIScrollView与其他视图的工作方式不同。 这里是苹果的自动布局发布说明 ,我已经复制了有趣的一点(重点是我的,在第三个项目符号点):

以下是关于UIScrollView自动布局支持的一些注意事项:

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

然后苹果继续展示如何正确使用UIScrollView自动布局的例子。

一般来说,最简单的解决方法之一就是在元素与UIScrollView底部之间创build一个约束。 所以在你想要在UIScrollView底部的元素中,创build这个底部空间约束:

在这里输入图像说明

再一次,如果您不想使用“自动布局”,请将其closures。 然后,您可以通过常用的方式设置contentSize 。 但是你应该明白的是,这是自动布局的预期行为。

尝试closures自动粘贴

selectViewController然后file inspecto r,并在interface builder document部分,你可以看到Use Autolayout检查与否。 如果选中,则uncheck

这个信息UIScrollView和Autolayout可能会给出细节。

试试这个代码来自动设置内容的大小

首先复制并粘贴你的视图控制器在viewDidLoad方法

  [self MHAutoContentSizeForScrollViewWithPadding:10 scrl:YOUR_SCROLLVIEW]; 

然后复制并粘贴到viewDidLoad方法下面

 -(void)MHAutoContentSizeForScrollViewWithPadding:(CGFloat)padding scrl:(UIScrollView*)view{ if ([view isKindOfClass:[UIScrollView class]]) { CGRect rect = CGRectZero; for(UIView * view in YOUR_SCROLLVIEW.subviews){ rect = CGRectUnion(rect, view.frame); } [YOUR_SCROLLVIEW setContentSize:CGSizeMake(rect.size.width, rect.size.height+padding)]; } else { NSLog(@"You can only set the ContentSize for ScrollViews"); } } 

连接YOUR_SCROLLVIEW委托也TextFeild委托也快乐编码!

如果使用自动布局,而不是将UIScrollView中的所有内容放入另一个UIView中,并将该UIView作为UIScrollView的唯一子对象。 然后你可以使用AutoLayout。

如果接近尾声的东西被搞乱了(UIScrollView滚动的方向的结束),那么改变最后的约束条件,使得优先级最低。