IOS7 : UIScrollView offset in UINavigationController

OK so i found the solution, I have set in my controller the property:

self.automaticallyAdjustsScrollViewInsets = false

I don't really understand the true benefit of this property though, (or why the default value is true)

The only documentation i found was there:

  • https://web.archive.org/web/20160405135605/https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html
  • https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin

Update

In iOS 11 automaticallyAdjustsScrollViewInsets is deprecated

You should now use:

self.tableView.contentInsetAdjustmentBehavior = .never

I also encourage you to check this question and its answer to get a better understanding of those properties


@Justafinger's answer worked like a charm for me as well.

Just wanted to add that this setting can also be adjusted easily from the interface builder.

  1. Select your view controller
  2. Click the 'Attributes Inspector' tab
  3. Uncheck 'Adjust Scroll View Insets'
  4. Enjoy!

enter image description here


I was running into this same issue, but I found a rather odd property on the ViewController in interface builder that seems to have been causing this for me. There is an "Extend Edges" set of check boxes. I removed the "Under Top Bars" check, and everything started laying out properly for me.


With automaticallyAdjustsScrollViewInsets set to YES (the default setting) there is a mismatch in scrollview positioning between ios6 and ios7, so to make them consistent you need to disable this setting. However, ios6 will crash if it comes across automaticallyAdjustsScrollViewInsets, so you either need to make a programatic change of automaticallyAdjustsScrollViewInsets conditional on ios7 or else switch off the option using the storyboard/NIB