UIScrollView - How to keep your views on screen
167 2 16448
Learn to Code For Free: http://apple.co/2dWjiXJ
As an iOS developer you always run into the problem of your views not all being able to fit on the screen.
This free learn ios video shows the proper way of using UIScrollView to make those controls scrollable!
By anonymous 2017-09-20
Simple Self-Contained Example
Judging by the high number of votes on the question and the low number of votes on the answers, people are not finding an understandable and quick solution here. Let me try to add one. This project is a self-contained example done completely in the Interface Builder. You should be able to work through it in 10 minutes or less. Then you can apply the concepts you learned to your own project.
The original question asks about scrolling buttons. Here I just use
UIViews but they can represent whatever view you like. I also chose horizontal scrolling because the storyboard screenshots are more compact for this format. The principles are the same for vertical scrolling, though.
UIScrollViewshould only use one subview. This is a 'UIView' that serves as content view to hold everything you wish to scroll.
- Make the content view and the scroll view's parent have equal heights for horizontal scrolling. (Equal widths for vertical scrolling)
- Make sure that all of the scrollable content has a set width and is pinned on all sides.
Start a new project
It can be just a single view application.
In this example we will make a horizontal scroll view. Select the View Controller and then choose Freeform in the Size Inspector. Make the width
1,000 and the height
300. This just gives us room on the storyboard to add content that will scroll.
Add a Scroll View
UIScrollView and pin all four sides to the root view of the view controller.
Add a Content View
UIView as a subview to the scroll view. This is key. Don't try to add lots of subviews to the scroll view. Just add a single
UIView. This will be your content view for the other views you want to scroll. Pin the content view to the scroll view on all four sides.
Now in the Document Outline, Command click both the content view and the scroll view's parent view in order to select them both. Then set the heights to be equal (Control drag from the Content View to the Scroll View). This is also key. Because we are scrolling horizontally, the scroll view's content view won't know how high it should be unless we set it in this way.
- If we were making the content scroll vertically, then we would set the content view's width to be equal to the scroll view's parent's width.
UIViews and give them all constraints. I used 8 point margins for everything.
- Green view: pin the top, left, and bottom edges. Make the width 400.
- Red view: pin the top, left, and bottom edges. Make the width 300.
- Purple view: pin all four edges edges. Make the width whatever the remaining space is (268 in this case).
Setting the width constraints is also key so that the scroll view knows how wide its content view will be.
That's all. You can run your project now. It should behave like the scrolling image at the top of this answer.
For vertical scrolling, just swap all the width and height directions in this example (tested and working).
- iOS: How To Make AutoLayout Work On A ScrollView
- How to configure a UIScrollView with Auto Layout in Interface Builder
- YouTube video tutorial: UIScrollView - How to keep your views on screen