Я пытаюсь разместить UIImageView
в центре родительского представления. Изображение должно сохранять исходное соотношение сторон, а также не должно превышать границы родителя. Таким образом, пейзажные изображения должны быть ограничены шириной родителя, а портретные изображения должны занимать столько вертикального пространства, сколько необходимо, сохраняя исходное соотношение.AutoLayout: UIImageView и Aspect Fit content mode
Звучит как простая задача для AutoLayout, не так ли? Вот мои настройки для UIImageView
:
- центр вертикально в родителю
- центр по горизонтали родителя
- imageView.width < = superview.width
- imageView.height < = superview.height
Я также установил contentMode
в Aspect Fit
. Все работает отлично для небольших изображений, которые меньше экрана устройства, но по какой-то причине мой UIImageView
занимает больше места, чем его базовый UIImage
для больших изображений (обратите внимание на зеленый фон - imageView.backgroundColor = [UIColor greenColor]
).
Почему это происходит? Я не эксперт по AutoLayout, мои ограничения выглядят разумными для меня. Если я использую более мелкие изображения, например, 200x400, то UIImageView
занимает ровно 200x400 точек на экране без дополнительных зеленых зон.
Я хотел бы добавить границы и закругленные углы, которые, очевидно, не будут работать должным образом в этом случае.
Я не знаю, соотношение форматов заранее, к сожалению, поскольку мне нужно показать разные изображения в этом представлении: большой, маленький, пейзаж, портрет или даже квадрат. Изображение со скриншота имеет разрешение 3264x2448, и на самом деле оно масштабируется должным образом: оно сохраняет свое соотношение, оно не усекается или не ухудшается. Но, к сожалению, изображение имеет больше физического пространства, чем само изображение. Зеленый фон был добавлен только для целей тестирования. Прозрачный фон не будет работать, так как мне нужно добавить закругленные углы, но эти углы не будут видны, так как края изображения не синхронизируются с изображением. – fraggjkee
Но я думаю, что я могу попытаться добавить соответствующее ограничение отношения к формату программно, хотя ... Звучит как план :) Но на самом деле я могу рассчитать и установить все программно без AutoLayout, поэтому идея этого вопроса заключалась в том, чтобы понять, достижимо ли это без написания кода Swift/Objective-C. – fraggjkee
@fraggjkee: Хорошо, но если ваш план выходит из строя, просто используйте мою функцию из обновленного ответа. Я тестировал его с большими и маленькими, портретными и пейзажными изображениями, похоже, работает так, как ожидалось. – alexburtnik