First, go into the offending storyboard and find the scrollview in question and in attributes uncheck Autoresize Subviews. This will prevent Xcode from automatically undoing everything we're about to do.
Second, and this is the painful part, you need to fix the widths of the views in the scrollview and return them to their proper settings. Just click on the view, find the right hand control knobs, and drag it back inside the scroll view.
In order to make the next step easier, all of the subviews should be in a single content view nested within the scrollview. (The nested content view is also a "best practice" for using auto-sizing auto-layouts in scrollviews, so get used to it.)
Note that if you don't first uncheck Autoresize Subviews then Xcode will kindly rearrange everything again the next time you reopen your storyboard.
Third, you need IBOutlets for your scrollview and your content view in your code.
Finally, add the following to your ViewController...
- (void)viewDidLayoutSubviews
{
[self.scrollView setAutoresizesSubviews:YES];
CGRect frame = self.contentView.frame;
frame.size.width = self.view.frame.size.width - 20;
self.contentView.frame = frame;
[super viewDidLayoutSubviews];
}
Basically, we're reenabling autoresize and then setting the width of the content view to be the proper width. Here, I want my content view to be nested within the scroll view with 10px margins (hence the - 20).
The above needs to be done for each offending scrollview in the storyboard.
A little involved, and just a stopgap measure, but faster than doing a brand new layout using autolayout. I was able to patch up a storyboard with about a dozen scenes and VC's in about 15 minutes. It would have taken much, much, much longer to rebuild everything using auto layout.
Note that this is also NOT fixed in the latest Xcode 8.1 beta. I'm pretty sure they're aware of the bug, but I'm also pretty sure this is Apple's way of "encouraging" their developers to start using auto layout.