UIScrollView不滚动?

我有一个UIScrollView在界面生成器中创build了一堆已经添加的UITextViewUIImageView对象。 我把它连接到一个IBOutlet ,并在-(void)viewDidLoad我把它的内容大小设置为1200x2000 。 用户交互启用,多点触控,滚动启用,并显示垂直和水平滚动指标都设置为YES 。 当我在iOS模拟器中启动应用程序时,它不会滚动。 什么可能是这种行为的原因?

  1. viewDidLoad即将推出。 您必须等到视图布局发生之后。 尝试在viewDidAppear中设置contentSize。

  2. 你在使用自动布局吗? 如果是这样,请检查以下答案(并忘记1.): UIScrollView不使用自动布局约束 。

我知道如何克服这个问题而不诉诸编写代码的最好方法是,这一切都可以在故事板内完成,这里是:

  1. 保持自动布局启用。
  2. 使一个通用的UIView UIScrollView的子视图。 2.1)把所有的视图组件放在这个通用的UIView中。
  3. 在子视图和UIScrollView之间创build一个自动布局约束。 您必须将最后一个子视图的右侧和/或底部固定在UIScrollView的右侧和/或底部。 这是如何UIScrollView知道内容的大小。

viewDidLoad确实太快了,但viewDidAppear:animated也许不会迟到。 设置contentOffset的理想场所是在viewDidLayoutSubviews

如果您使用Autolayout,请确保您将代码设置为内容大小

 viewDidLayoutSubviews 

我在UIScrollView上使用自定义视图来拉取刷新函数,滚动视图不可滚动。 我尝试使用AutoLayout设置contentSize ,并尝试通过代码设置它。 滚动视图仍然不能滚动。

花费contentInset小时后,我用contentInset解决。 它会告诉滚动视图为滚动添加一些额外的空间。

 override func viewDidLayoutSubviews() { // Add extra 15pt on the `top` of scrollView. //self.scrollView.contentInset = UIEdgeInsetsMake(15, 0, 0, 0) // Add extra 2pt on the `bottom` of scrollView, let it be scrollable. And the UI is more beautiful in my case. self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 2, 0) } 

参考文档:

  • 了解UIScrollView类@blog的contentOffset和contentInset属性
  • 什么是UIScrollView contentInset属性? @堆栈溢出