0
votes

In a nutshell… I can scroll content however I’m unable to scroll to top to see "all" of the scrollView content after changing the ViewController view frame (the frame Origin Y value is decreased so the VC view moves upward to accommodate the keyboard).

On the storyboard ViewController I added a UIScrollview and a button below it. The scroll view is constrained to its parent (the VC) view. I add a contentView within the scrollview and constrain it to the scrollview and add equal width and height constraints between the content view and the scrollviews parent view. I then add textfields to the contentView and constrain them to the contentView. I calculate and set the scrollView content size so Im able to scroll the content only and not the entire contentView. So far so good.

I register for keyboard notifications and in the keyboard will show handler I decrease the view controller’s view origin Y value (via setFrame) which moves the view upward so the bottom of the view ends up just above the keyboard. Also in the keyboardWillShow handler I increase the scrollview contentsize by the vertical height of the keyboard since the scrollView area has decreased by the vertical height of the keyboard.

Im able to scroll the content however contentoffset (0,0) resides mid way in the content and the additional contentsize appears below the textfields content. Im no longer able to scroll up to the top of the content.

I know that the scrollView scrolls its content by changing its bounds so I tried to change the scrollview frame (decrease its origin Y value) and also tried the same for the contentview however when one of the textfields in the contentView becomesFirstResponder OR I just try to scroll with the mouse, the content scrolls down and the top half of the content is not visible and cannot be scrolled to (as mentioned contentoffset is (0,0) half way down the content and is "the top of the content".

Does anyone see any glaring issues with my approach for continuing to scroll all of the content with the keyboard displayed and the ViewController origin Y value decreased?

1
"I calculate and set the scrollView content size ..." -- Don't do that. Use constraints to let auto-layout handle all of that.DonMag
The contentView is constrained to the scrollview. Not setting setContentSize programmatically results in the entire contentView area is scrollable even though there is nothing on it. I reduce the content size so that only the area with textfields is scrollable. It works fine till I change the origin of the VC view...imobilizer
"I added a UIScrollview and a button below it" -- what does the button do? Should it be hidden behind the keyboard when showing?DonMag

1 Answers

0
votes

I needed to add contentInsets and scrollIndicatorInsets. Great article here... https://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/