Предотвратить вертикальное UIStackView от растяжения подпредставления? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть UITableViewCell с вертикальным UIStackView, который в настоящее время имеет .alignment = fill и distribution = fill.Внутри стекового представления у меня есть UILabel и UIImageView.

enter image description here

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

Возможно ли, чтобы метка растягивалась на ширину стека, но не на изображение?В идеале, я хотел бы, чтобы представление изображения имело размер только масштабированного изображения, а , а не растягивалось до краев стека.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Внесите следующие изменения:

  1. Установите выравнивание представления стека на .center вместо .fill.
  2. Ограничьте ширину метки, чтобы она равнялась ширине представления стека.
  3. В коде, когда вы устанавливаете изображение представления изображения, также создайте ограничение соотношения сторон для представления изображения, как это:

    class MyCell: UITableViewCell {
        @IBOutlet private var myImageView: UIImageView!
        private var imageViewAspectConstraint: NSLayoutConstraint?
    
        func setImage(_ image: UIImage) {
            myImageView.image = image
    
            imageViewAspectConstraint?.isActive = false
            imageViewAspectConstraint = myImageView.widthAnchor.constraint(
                equalTo: myImageView.heightAnchor,
                multiplier: image.size.width / image.size.height)
            imageViewAspectConstraint!.isActive = true
        }
    }
    

Обратите внимание, что, поскольку ячейки можно использовать повторно, вам также необходимо удалить предыдущее ограничение соотношения сторон, если оно есть.Код, который я разместил, использует imageViewAspectConstraint, чтобы сохранить ограничение и удалить его при изменении изображения.

0 голосов
/ 04 октября 2018

Один подход:

  • вычисление подходящей рамки для вашего изображения

Когда пользователь нажимает на изображение, оценивает позицию касания и предпринимает только действияесли ответвление находится в рамке подгонки аспекта.


Другой подход:

  • вычисление подходящей рамки подгонки под изображение
  • вставка UIImageView по центру по горизонтали внутри UILayoutGuide
  • добавьте UILayoutGuide в качестве упорядоченного подпредставления представления стека

Это будет держать вашу метку растянутой по ширине вида стека (ячейка) и расположите изображение по центру, позволяя обнаруживать касания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...