UIScrollView AutoLayout Vertical Only
You can do this entirely using constraints and it's really easy.
The UIScrollView
just needs to understand how much width and space it has inside it. So it needs to have something pinned to the Leading
, Trailing
, Top
& Bottom
constraints. Also the width and height of the content needs to be fixed (this does not mean I have to specificy it. I can still use constraints to achieve this.)
- Add a
UIScrollView
and position as required. - Add a
UIView
inside theUIScrollView
for the content. - Set the
Leading
,Trailing
,Top
&Bottom
constraints of the contentUIView
to be 0. - Add an
Equal Width
constraint to theUIScrollView
andUIView
. This will make it vertically scrolling only. - You now need to set the height of the content
UIView
. You can then either specify the height of the content view (blech) or use the height of the controls contained within by making sure the bottom control is constrained to the bottom of the content view.
I did this and it worked a treat.
For disabling the horizontal scroll, you can set the content size in the (void)scrollViewDidScroll method.
[self.scrollView setContentOffset: CGPointMake(0, self.scrollView.contentOffset.y)];
You'll also want to set the directional lock so only 1 scroll direction is used at a time. https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollView_Class/index.html#//apple_ref/occ/instp/UIScrollView/directionalLockEnabled
self.scrollView.directionalLockEnabled = YES;