The UIScrollView controller does not scroll completely


I am pretty sure this has something to do with the dreaded AutoLayout. (been trying since 2days to get hang of it)

So I mastered it somewhat, but now I have problem where my UIScrollView is not scrolling fully down, pictures are much better at explaining these things

this is the scroll view

this is the content view

so the problem is the scrolling is happening but then again it springs back up. So I am not able to click on the signup button

EDIt 1


I have created a little example on github for you to look at, here. The project illustrates the answer below and uses the techniques I describe and nothing else.

Original Answer:

couple of things I would advise here.

  1. First, I know you've been trying for a while but remove all the current constraints (painful I know but). Do this for clarity as ....

  2. The view should be the size of the scene, it looks like you want the scrollview to be the full screen so that too needs to be the size of the scene.

e.g. if you are designing at 6Plus by default the scene size is 414x736 so the view and the scrollview it contains should also be 414x736.

  1. Only the content view needs to be the size of the real content you wish to show. Let's say for arguments sake that the content is 414x1000.

Now the constraints for the scrollview are simple. It needs zero spacing to all it's edges.

You can add the content view to the scrollview in a couple of ways. The way I try to do this varies from project to project and depends mostly on how complex the scene is. If it's a really busy scene I keep the content view outside of the scrollview in interface builder so that I can work on it easily and visualize the whole of the view. Then I add the content view to the scrollview in code.

If its a simpler view You can add it inside the scrollview in interface builder. Ultimately whichever way you do it, you can lose visibility of the content view in interface builder because the contentview is larger than the scrollview and the content gets obscured. So play about and find a good way for you.

  1. Define the content view and all it's subviews. The content view needs to be taller than the scrollview otherwise it wont scroll. All of the content view's subviews need to have defined heights from top to bottom and widths from left to right. In your case the scrollview is scrolling vertically not horizontally so all the widths need to add up to the width of the scroll view BUT the heights need to add up to the full height of the content view.

Note: if you do this proportially your life will be easier later. If you do all this with fixed heights the storyboard will break on different device sizes.

  1. Now the "tricky bit" and it's a bit counter intuitive. You need to pin the content view to the scrollview, remember the height of the content view is taller than the scrollview. In all other circumstances in Interface Builder pinning a view to a superview (0 padding) will adjust the height (or width) accordingly. For the relationship between a scrollview and it's content view this doesn't happen.

First pin the contentview

Notice the -400? Remember the content view is taller than the scrollview and we will change this immediately.

Select the bottom constraint (-400) that we have just created:

Select the drop down arrow next to the constant value:

Select Standard Value and type in 0 for the constant.

You should now have a storyboard with no broken constraints and if you build and run you should get a scrollview as desired.