Как масштабировать представление UIImage до квадрата с помощью Autolayout внутри UIScrollView

Я изо всех сил пытался изучить автопрокладку (наконец). Я хочу иметь UIScrollView с вертикальной прокруткой, в котором хранится весь контент для представления. Я хочу закрепить представление UIImage в верхней части прокрутки и сохранить изображение квадратом (scaleToFill). В основном я хочу это сделать (только я хочу сделать это с помощью автопрокладки):

введите описание изображения здесь

Я не могу заставить изображение сохранять свое соотношение сторон, оставаясь в пределах экрана. Всякий раз, когда я добавляю ограничение соотношения сторон, imageView вырастает примерно до 600 точек (я думаю, ширина png), но я хочу, чтобы он был такой же ширины, как экран.

Я думаю, что я правильно устанавливаю ограничения для UIImageView, потому что, если я избавлюсь от scrollView и просто перетащу imageViw прямо в представление, он, похоже, сделает то, что я хочу. Хитрость заключается в том, чтобы поместить его в scrollView.

Вот как я его сейчас настроил:

введите описание изображения здесь

Все 4 ограничения пространства по вертикали / горизонтали в представлении прокрутки установлены на постоянный 0.


person Chase Roberts    schedule 10.09.2014    source источник
comment
Вы хотите сохранить исходное соотношение сторон изображения, чтобы оно прокручивалось в режиме прокрутки, если размер больше, чем границы экрана? Или просто в рамку? Если последнее, то зачем вам вообще прокрутка?   -  person Petar    schedule 10.09.2014
comment
Я не хочу сохранять пропорции изображения. Я хочу, чтобы он всегда был квадратным. Я собираюсь поместить под изображением кучу контента, который пользователь мог бы прокрутить вниз, чтобы прочитать.   -  person Chase Roberts    schedule 10.09.2014
comment
Почему бы вам тогда не поместить прокрутку под изображением?   -  person Petar    schedule 10.09.2014
comment
Я хочу, чтобы изображение прокручивалось, когда пользователь прокручивает вниз.   -  person Chase Roberts    schedule 10.09.2014


Ответы (1)


Поскольку размер UIScrollView зависит от его содержимого, вы не можете иметь размер вашего UIImageView подпредставления, зависящего от него.

Вы должны удалить ограничение соотношения сторон UIImageView и использовать фиксированную ширину. У вас также может быть ваша UIImageView ширина, зависящая от другого вида в UIScrollView, который имеет либо фиксированную ширину, либо иным образом однозначную ширину.

Не забудьте использовать заполнитель как внутреннее значение размера в Интерфейсном Разработчике.

Надеюсь это поможет.

person Petar    schedule 10.09.2014
comment
Так нельзя ли вручную установить contentSize для scrollview в IB? Обычно я просто устанавливаю рамку и размер содержимого. Разве нет способа просто сказать, что все это нужно настроить на основе кадра, с которым я создаю этот экземпляр? Что это за дело с заполнителем, как с внутренним значением размера? Я видел другие сообщения об этом на SO, но я еще не понимаю, что он делает / в чем причина. - person Chase Roberts; 11.09.2014
comment
Извините за все последующие вопросы. - person Chase Roberts; 11.09.2014
comment
ScrollView ведет себя немного иначе при использовании с AutoLayout. Вы можете прочитать об этом здесь: developer.apple.com/library/ios /technotes/tn2154/_index.html. Причина использования заполнителя в качестве значения внутреннего размера заключается в том, чтобы вы могли видеть свое представление в IB с размером, который вы установили, если выбрано значение по умолчанию, IB будет жаловаться. Из IB: установка размера внутреннего содержимого времени разработки влияет только на представление при редактировании в Interface Builder. Представление не будет иметь этого внутреннего размера содержимого во время выполнения. - person Petar; 11.09.2014
comment
Если у вас есть фиксированная ширина и высота, в этом нет необходимости. Я также пытаюсь изучить autolayout, это немного сложно, но я думаю, что это очень мощно. - person Petar; 11.09.2014