UICollectionViewFlowLayout Issue - PullRequest
       35

UICollectionViewFlowLayout Issue

0 голосов
/ 17 февраля 2020

Я пытался создать коллекцию с самооб измерением * ViewView cell, но мой ярлык не хочет увеличивать его высоту и становится многострочным, вместо этого ярлык просто идет одной строкой, а моя ячейка выходит за рамки фрейма collectionView. Я создал свой собственный UICollectionViewFlowLayout и попытался обработать все вещи там. Что я сделал не так? Ждем ваших ответов, спасибо!

Моя реализация:

class VerticalLayout:UICollectionViewFlowLayout {
override func prepare() {
    super.prepare()
    self.scrollDirection = .vertical
    self.minimumLineSpacing = 0
    self.minimumInteritemSpacing = 0
    self.estimatedItemSize = CGSize(width: UIScreen.main.bounds.width, height: 173)
    self.sectionInset = .zero
    }
}

enter image description here

1 Ответ

1 голос
/ 17 февраля 2020

Вы должны посчитать высоту текста и передать ее в свой метод делегата viewview

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let itemHeight: CGFloat = estimatedHeightForText(text: items[indexPath.item].text, fontSize: fontSize, fontWeight: fontWeight, width: widthForText) + someRawValue // here count height for cell
    var itemWidth: CGFloat = someRawVal

    return CGSize(width: itemWidth, height: itemHeight)

}

Считайте здесь

    func estimatedHeightForText(text: String, fontSize: CGFloat, fontWeight: UIFont.Weight, width: CGFloat) -> CGRect {

    let size = CGSize(width: width, height: 1000)
    let font = UIFont.systemFont(ofSize: fontSize, weight: fontWeight)

    return NSString(string: text).boundingRect(with: size, options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: [NSAttributedString.Key.font: font], context: nil)
}

UPD. widthForText - это важно значение ширины текста в вашей ячейке. Считайте это правильно

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