Свойство режима содержимого представления указывает, как его содержимое должно быть размечено.В Интерфейсном Разработчике различные режимы могут быть выбраны в Инспекторе Атрибутов.
Давайте используем два изображения, чтобы увидеть, как работают различные режимы.
Масштабирование до заполнения
Высота и ширина изображения растянуты в соответствии с размером UIImageView
.
Соотношение сторон
Самая длинная сторона (высота или ширина) изображения растягивается в соответствии с видом.Это делает изображение максимально большим, при этом показывая все изображение целиком и не искажая высоту или ширину.(Я установил фон UIImageView
на синий, чтобы его размер был четким.)
Заполнение аспекта
Самая короткая сторона(высота или ширина) изображения растягивается, чтобы соответствовать виду.Как и в «Aspect Fit», пропорции изображения не искажаются от их исходного соотношения сторон.
Перерисовать
Перерисоватьтолько для пользовательских представлений, которые должны выполнять собственное масштабирование и изменение размера.Мы не используем пользовательское представление, поэтому не следует использовать Redraw.Обратите внимание, что здесь UIImageView
просто дает нам тот же результат, что и Scale to Fill, но он делает больше закулисной работы.
О перерисовке, в документации говорится:
Режимы содержимого хороши для повторного использования содержимого вашего представления, но вы также можете установить режим содержимого на значение UIViewContentModeRedraw
, если вы хотите, чтобы ваши собственные представления перерисовывались во время масштабирования иизменение размера операций.Установка этого значения в режиме содержимого вашего вида заставляет систему вызывать метод drawRect:
вашего представления в ответ на изменения геометрии.В общем, вам следует избегать использования этого значения везде, где это возможно, и вам определенно не следует использовать его со стандартными системными представлениями.
Центр
Изображение центрируется на виде, но длина и ширина изображения не растягиваются.
Верх
Верхний край изображения центрируется по горизонтали в верхней части вида, а длина и ширинаизображение не растягивается.
Снизу
Нижний край изображения центрируется по горизонтали в нижней части вида, а длина и ширинаизображение не растягивается.
Слева
Левый край изображения отцентрирован по вертикали слева от вида, а длина и ширинаизображение не растягивается.
Справа
Правый край изображения отцентрирован по вертикали справа от вида, а длина и ширинаизображение не растягивается.
Вверху слева
Верхний левый угол изображения размещается в верхнем левом углу представления.Длина и ширина изображения не растягиваются.
Вверху справа
Верхний правый угол изображения размещается по адресуверхний правый угол зрения.Длина и ширина изображения не растягиваются.
Внизу слева
Нижний левый угол изображения размещен по адресунижний левый угол обзора.Длина и ширина изображения не растягиваются.
Внизу справа
Нижний правый угол изображения размещен по адресунижний правый угол обзора.Длина и ширина изображения не растягиваются.
Примечания
Если содержимое (в нашем случае изображение) имеет тот же размер, что и представление (в нашемв случае UIImageView
), то изменение режима контента не будет иметь никакого значения.
См. этот и этот вопрос для обсуждения режимов содержимого для представлений, отличных от UIImageView
.
В Swift, чтобы установить программный режим содержимого, вы делаете следующее:
imageView.contentMode = UIViewContentMode.ScaleToFill
imageView.contentMode = UIViewContentMode.ScaleAspectFit
imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.contentMode = UIViewContentMode.Redraw
imageView.contentMode = UIViewContentMode.Center
imageView.contentMode = UIViewContentMode.Top
imageView.contentMode = UIViewContentMode.Bottom
imageView.contentMode = UIViewContentMode.Left
imageView.contentMode = UIViewContentMode.Right
imageView.contentMode = UIViewContentMode.TopLeft
imageView.contentMode = UIViewContentMode.TopRight
imageView.contentMode = UIViewContentMode.BottomLeft
imageView.contentMode = UIViewContentMode.BottomRight