Регулировка высоты UILabel в зависимости от содержимого? - PullRequest
0 голосов
/ 04 мая 2019

У меня есть собственный класс CollectionViewCell, который содержит метку и изображение. По сути, изображение будет ограничено слева, сверху и справа от ячейки. Однако я хочу, чтобы его высота варьировалась в зависимости от высоты UILabel, которая, в свою очередь, будет зависеть от содержимого внутри него. Ниже моя попытка сделать это:

импорт UIKit

класс CustomCollectionViewCell: UICollectionViewCell {

override init(frame: CGRect) {

    super.init(frame: frame)

    backgroundColor = .yellow

}

required init?(coder aDecoder: NSCoder) {

    fatalError("init(coder:) has not been implemented")

}

convenience init(cellTextTile text: String) {

    self.init()

}

func setupCustomCellElements(cellImageName image: String, cellTitleTextColour textColour: UIColor, cellTitleTextSize textSize: CGFloat, cellTitleFontType fontType: String, cellTitle title: String) {

    let cellImage: UIImageView = {

        let imageView = UIImageView()

        imageView.backgroundColor = .clear

        imageView.image = UIImage(named: image)

        imageView.translatesAutoresizingMaskIntoConstraints = false

        return imageView

    }()

    let cellTitle: UILabel = {

        let label = UILabel()

        label.textColor = textColour

        label.font = UIFont(name: fontType, size: textSize)

        label.text = title

        label.textAlignment = .center

        label.frame.size = CGSize(width: self.frame.size.width, height: CGFloat.greatestFiniteMagnitude)

        label.numberOfLines = 0

        label.lineBreakMode = NSLineBreakMode.byWordWrapping

        label.sizeToFit()

        label.translatesAutoresizingMaskIntoConstraints = false

        return label

    }()

    addSubview(cellImage)

    addSubview(cellTitle)

    NSLayoutConstraint.activate([

        cellTitle.bottomAnchor.constraint(equalTo: bottomAnchor),

        cellTitle.leftAnchor.constraint(equalTo: leftAnchor),

        cellTitle.rightAnchor.constraint(equalTo: rightAnchor),

        cellImage.bottomAnchor.constraint(equalTo: cellTitle.topAnchor),

        cellImage.topAnchor.constraint(equalTo: topAnchor),

        cellImage.leftAnchor.constraint(equalTo: leftAnchor),

        cellImage.rightAnchor.constraint(equalTo: rightAnchor)

        ])

}

}

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

С уважением, Шади.

1 Ответ

0 голосов
/ 04 мая 2019

Вам необходимо ограничение высоты для imageView

cellImage.heightAnchor.constraint(equalToConstant: 50), // or any value 

Также не добавляйте свойства внутри метода setupCustomCellElements, делайте их переменными экземпляра и добавляйте их внутри функции init


Лучше также добавить представления к

contentView.addSubview(cellImage) 
contentView.addSubview(cellTitle)

и ограничить с ним ограничения

...