Авторазмер для ячейки в UICollectionViewCell - PullRequest
0 голосов
/ 21 мая 2019

В моей ячейке есть заголовок и описание. Описание этикетки может быть маленьким и большим. Я использую для этого descriptionLabel.sizeToFit(), но как использовать то же самое для ячейки. Если cell.sizeToFit () не работает

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as!  ExercisesCollectionViewCell

        let workouts = exercises[indexPath.item]
        cell.titleLabel.text = workouts.titleExercise
        cell.descriptionLabel.text = workouts.descriptionExercise
        cell.descriptionLabel.sizeToFit()
        cell.sizeToFit()

    return cell
}

изображение

1 Ответ

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

Используйте UITableview вместо UICollectionView

Сначала нужно посчитать количество строк UILabel

 NSInteger lineCount = 0;
 CGSize textSize = CGSizeMake(yourLabel.frame.size.width, MAXFLOAT);
 int rHeight = lroundf([yourLabel sizeThatFits:textSize].height);
 int charSize = lroundf(yourLabel.font.lineHeight);
 lineCount = rHeight/charSize;
 NSLog(@"No of lines: %i",lineCount);

иначе вы можете использовать расширение для подсчета максимальной строки метки

extension UILabel {
    func calculateMaxLines() -> Int {
        let maxSize = CGSize(width: frame.size.width, height: CGFloat(Float.infinity))
        let charSize = font.lineHeight
        let text = (self.text ?? "") as NSString
        let textSize = text.boundingRect(with: maxSize, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil)
        let linesRoundedUp = Int(ceil(textSize.height/charSize)) 
        return linesRoundedUp
    }    
}

Используйте это:

let lineCount = YourLabel. calculateMaxLines 

Теперь установите высоту для каждой строки метки

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
   return lineCount * 18 //If total 3 line so 3*18 = 54 is height else you can take any number instead of 18 according to font size height
}
...