UIScrollView not scrolling

viewDidLoad is indeed too soon, but viewDidAppear:animated might not be late enough either. The ideal place to set the contentOffset is inside viewDidLayoutSubviews.


The best way I know how to overcome this problem without resorting to writing code is that it all can be done within a storyboard and here is how:

  1. Leave autolayout enabled.
  2. Make a generic UIView a subview of the UIScrollView. 2.1)Put all your View components inside this generic UIView.
  3. Make a autolayout constraint between a subview and the UIScrollView. You must pin the right and/or bottom of the last subview to the right and/or bottom of the UIScrollView. This is how the UIScrollView knows the content size.

  1. viewDidLoad is to soon. You must wait until after the layout of the views has taken place. Try setting the contentSize in viewDidAppear.

  2. Are you using autolayout? If so, check out the following answer (and forget 1.): UIScrollView doesn't use autolayout constraints.