Решения выше работают, но я изо всех сил пытался понять, почему. Я хотел бы поделиться этими двумя статьями, которые я нашел очень полезными при правильном настройке mininumZoomScale и использовании этого для работы с iOS8/XCode 6.
Сначала, чтобы получить представление прокрутки для работы на iOS8, необходимо установить правильные ограничения от начала. Другие плакаты рекомендовали, и я согласен, что в вашем представлении прокрутки должен быть только один просмотр содержимого. Прекрасно вставлять все ваши другие представления в одно представление контента, но вы не хотите устанавливать ограничения вида прокрутки на кучу небольших представлений.
Подключите верхние, ведущие, обратные и нижние ограничения к просмотру прокрутки из представления содержимого (в моем случае это UIImageView) с константой 0. Это задает края вашего представления содержимого в виде прокрутки.
Затем установите размер представления содержимого с использованием ограничений равной ширины и равномерной высоты для представления прокрутки. Вы не можете использовать фиксированную ширину и фиксированную высоту в представлении содержимого, поскольку масштабирование не будет работать, и вы не сможете самостоятельно управлять размером. Без этих ограничений iOS8 устанавливает размер (0,0), прежде чем у вас появится шанс, приводящий к некоторым нечетным артефактам. С помощью этих ограничений вызовите метод updateZoom в методе ориентации, и вы добры. В iOS7 вызовите его в didRotateFromInterfaceOrientation. В iOS8 вызовите его из viewWillTransitionToSize. Вам нужно будет обновить код для перехода в новый размер.
Огромное спасибо Наташе Робот для решения ограничения: http://natashatherobot.com/ios-autolayout-scrollview/
При вызове метода updateZoom, чтобы подправить свой минимум, вы должны также проверить, является ли текущий zoomScale < ваш minimumZoomScale и сбросить его, если он. Вы не должны перезагружать zoomScale в противном случае, поскольку это становится еще одним подозрительным взглядом вашего пользователя при изменении ориентации.
Что касается остальной части этого и почему математические работы, Джо Конвей в objc.io положил все это в этой фантастической статье на границах против кадра с UIScrollViews: http://www.objc.io/issue-3/scroll-view.html
Благодаря обоим и плаката выше ,
-(void)updateZoom {
self.scrollView.minimumZoomScale = MIN(self.scrollView.bounds.size.width/self.imageView.image.size.width, self.scrollView.bounds.size.height/self.imageView.image.size.height);
if (self.scrollView.zoomScale < self.scrollView.minimumZoomScale)
self.scrollView.zoomScale = self.scrollView.minimumZoomScale;
}