Ответ 1
Наконец, я нахожу проект UIImageViewAligned, который может решить его.
Благодаря @Marchy появилась также быстрая версия UIImageViewAlignedSwift
Я хочу управлять выравниванием изображения при использовании UIViewContentModeScaleAspectFit
в UIImageView
.
Например, у меня есть два UIImageView
в одном представлении, как указано выше. Эти два UIImageView
contentMode UIViewContentModeScaleAspectFit
. Теперь я хочу установить изображение 3 для выравнивания вправо и изображение 4 для выравнивания влево, чтобы эти два изображения могли быть вместе.
Я пытаюсь установить contentMode на UIViewContentModeScaleAspect|UIViewContentModeLeft
, но это еще хуже.
Любые предложения приветствуются.
Наконец, я нахожу проект UIImageViewAligned, который может решить его.
Благодаря @Marchy появилась также быстрая версия UIImageViewAlignedSwift
Вместо того, чтобы пытаться выровнять изображение в представлении изображения, вы можете программно добавить ограничение ширины в представление изображения, чтобы не было "лишнего пространства".
Предположим, что у вас есть UIImageView
с режимом содержимого Aspect Fit и фиксированное ограничение высоты, добавленное в построителе интерфейса. Затем в соответствующем контроллере просмотра проверьте соотношение сторон изображения и примените необходимое ограничение ширины, чтобы привязать изображение к содержащемуся изображению. Например:.
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// UIImage loaded from somewhere...
imageView.image = uiImage
// Check the UIImageView for existing height constraints
let heightConstraints = imageView.constraints.filter{$0.firstAttribute == .height}
if let imageViewHeight = heightConstraints.first?.constant {
// Calculate the width which would make the image view fit
// the image perfectly, and constrain the view to that width.
let desiredImageViewWidth = (imageViewHeight / uiImage.size.height) * uiImage.size.width
imageView.addConstraint(NSLayoutConstraint(item: imageView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: desiredImageViewWidth))
}
}
Чтобы применить это к вашей проблеме, вы можете ограничить ваши два UIImageView
рядом друг с другом, установить фиксированное ограничение высоты для обоих (одного и того же значения), а затем программно установить ширину с помощью вышеуказанного кода.
Я не думаю, что то, что вы пытаетесь сделать, даже возможно. Однако я бы порекомендовал совершенно другой подход. Вместо того, чтобы одновременно хранить два полноразмерных изображения в памяти, чтобы отображать их части, почему бы не просто обрезать фрагменты изображения до нужных размеров. Этот метод будет намного более эффективным.
Вы можете найти информацию об обрезке UIImage здесь: Обрезка UIImage
Другим вариантом для некоторых людей может быть настройка приоритета размещения контента в UIImageView
. В Интерфейсном UIImageView
добавьте ограничение к UIImageView
с низким приоритетом.
Это будет удовлетворять ограничениям, пока изображение не будет добавлено. Затем установите для UIImageView Content Hugging Priority высокое значение для ширины (или высоты, если вы выравниваете верх/низ).
Затем просто установите режим содержимого UIImageView на то, что вы хотите. Надеюсь это поможет!