UIImage Aspect Fill и clipsToBounds - PullRequest
       45

UIImage Aspect Fill и clipsToBounds

0 голосов
/ 10 марта 2019

Я хочу установить изображение для UIImage, но как только я его установлю, UIImageView становится больше и переходит на другие элементы.

Здесь представлено решение: Обрезать UIImage, чтобы уместить изображение кадра

Но я не могу заставить его работать, я устанавливаю свойства как в предоставленном решении.

Может быть, кто-нибудь может взглянуть и помочь мне:

Без настройки изображения:

enter image description here

После настройки изображения: enter image description here

class Cell: UICollectionViewCell, CollectionViewCellConfigurable {

    var image = UIImageView()
    var dateDay = UILabel()
    var dateMonth = UILabel()
    var title = UILabel()

    lazy private var dateContainer: UIView = {
       let v = UIView()
        v.sv(dateDay, dateMonth)

        dateDay.heightAnchor.constraint(equalTo: self.dateMonth.heightAnchor, multiplier: 1).isActive = true
        dateDay.leadingAnchor.constraint(equalTo: v.leadingAnchor, constant: 5).isActive = true
        dateDay.trailingAnchor.constraint(equalTo: v.trailingAnchor, constant: -5).isActive = true
        dateDay.topAnchor.constraint(equalTo: v.topAnchor, constant: 15).isActive = true
        dateDay.bottomAnchor.constraint(equalTo: dateMonth.topAnchor, constant: -5).isActive = true

        dateMonth.heightAnchor.constraint(equalTo: self.dateDay.heightAnchor, multiplier: 1).isActive = true
        dateMonth.leadingAnchor.constraint(equalTo: v.leadingAnchor, constant: 5).isActive = true
        dateMonth.trailingAnchor.constraint(equalTo: v.trailingAnchor, constant: -5).isActive = true
        dateMonth.topAnchor.constraint(equalTo: dateDay.bottomAnchor, constant: 5).isActive = true
//        dateMonth.bottomAnchor.constraint(greaterThanOrEqualTo: v.bottomAnchor, constant: -5).isActive = true
        return v
    }()

    lazy private var container: UIView = {
        return UIView()
    }()

    func configureCellAtIndexPath(item: Journaling) {
        self.image.image = UIImage.baliBeach
        self.image.backgroundColor = .green
        self.dateDay.text = "16"
        self.dateMonth.text = "May"
        self.title.text = "Text visible"

    }

    override init(frame: CGRect) {
        super.init(frame:frame)
        setUpLayout()
        additionalSetUp()
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func additionalSetUp() {
        backgroundColor = .clear
        let colorText: UIColor = .grau

        dateDay.textColor = colorText
        dateMonth.textColor = colorText
        title.textColor = colorText
        dateDay.textAlignment = .center
        dateMonth.textAlignment = .center
        title.textAlignment = .center
        image.contentMode = .scaleAspectFill
        image.clipsToBounds = true
        image.autoresizesSubviews = true

    }

    func setUpLayout() {
        sv(dateContainer, container)

        container.sv(image,title)

        dateContainer.widthAnchor.constraint(equalToConstant: 45).isActive = true
//        dateContainer.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 0.15).isActive = true
        dateContainer.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 0).isActive = true
        dateContainer.trailingAnchor.constraint(equalTo: container.leadingAnchor, constant: 0).isActive = true
        dateContainer.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true
        dateContainer.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true

//        container.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 0.5).isActive = true
        container.leadingAnchor.constraint(equalTo: dateContainer.trailingAnchor, constant: 0).isActive = true
        container.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: 0).isActive = true
        container.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true
        container.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true

        image.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 5).isActive = true
        image.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: -5).isActive = true
        image.topAnchor.constraint(equalTo: self.topAnchor, constant: 15).isActive = true
        image.bottomAnchor.constraint(equalTo: title.topAnchor, constant: -5).isActive = true

        title.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 0).isActive = true
        title.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: 0).isActive = true
        title.topAnchor.constraint(equalTo: image.bottomAnchor, constant: 5).isActive = true
        title.bottomAnchor.constraint(equalTo: container.bottomAnchor, constant: 0).isActive = true
    }
}

1 Ответ

2 голосов
/ 10 марта 2019

Вам необходимо повысить приоритет вертикальной компрессии надписи заголовка, так как imageView равен = 750, поэтому он занимает пространство

title.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 751), for: .vertical)
...