iOS: программно выровнять UIImageView к основанию с помощью якорей - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь создать UIImageView программно (поэтому нет раскадровки / редактора пользовательского интерфейса) и выровнять его, используя привязки. UIImageView должен быть выровнен по низу и масштабирован так, чтобы соответствовать нижней области (например, нижний колонтитул во всю ширину), но поддерживать соотношение сторон, например, что доступно в редакторе раскадровки?

enter image description here

Мой текущий код в viewDidLoad() выглядит следующим образом, но независимо от того, что я делаю, изображение отображается вверху, и оно выглядит как ImageView (не изображение) заполняет всю высоту родительского вида.

// Create and add image view
let imgView = UIImageView(image : UIImage(named : "Images/main_bottom.png"))
imgView.translatesAutoresizingMaskIntoConstraints = false
imgView.contentMode = .scaleAspectFit

view.addSubview(imgView)


// Align image view
let margins = view.safeAreaLayoutGuide

NSLayoutConstraint.activate([
    imgView.leadingAnchor.constraint(equalTo: margins.leadingAnchor),
    imgView.trailingAnchor.constraint(equalTo: margins.trailingAnchor),
    imgView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
])

1 Ответ

0 голосов
/ 30 января 2020

Мне удалось найти решение, используя приведенные выше комментарии и дальнейшие эксперименты, вычислив и установив привязку высоты к соотношению изображений.

// Compute image ratio
let ratio = imgView.intrinsicContentSize.height / imgView.intrinsicContentSize.width

// Set height anchor as a computed value of the (auto-scaled) width, and the image ratio
NSLayoutConstraint.activate([
   // ...other contraints go here still...
   imgView.heightAnchor.constraint(equalTo: imgView.widthAnchor, multiplier: ratio)
])
...