Высота ячейки автосбора - PullRequest
0 голосов
/ 14 июля 2020

У меня есть кастомная ячейка с меткой. Я получаю текст с сервера, и ячейка в коллекции должна выбрать высоту, чтобы весь текст поместился и был виден. Сейчас использую этот метод, но не знаю, как изменить высоту, чтобы она регулировалась.

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
       
        return   CGSize(width: self.bounds.width, height: 90)
      
   }

1 Ответ

2 голосов
/ 14 июля 2020

Шаг 1: - Создайте функцию для оценки размера вашего текста: этот метод вернет значение высоты, которое будет соответствовать вашей строке!

private func estimateFrameForText(text: String) -> CGRect {
    //we make the height arbitrarily large so we don't undershoot height in calculation
    let height: CGFloat = 999

    let size = CGSize(width: yourDesiredWidth, height: height)
    let options = NSStringDrawingOptions.UsesFontLeading.union(.UsesLineFragmentOrigin)
    let attributes = [NSFontAttributeName: UIFont.systemFontOfSize(18, weight: UIFontWeightLight)]

    return NSString(string: text).boundingRectWithSize(size, options: options, attributes: attributes, context: nil)
}

Step 2: Используйте или переопределите метод делегата ниже:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    var height: CGFloat = 0

   //we are just measuring height so we add padding constant to give the label some room to breathe! 
    var padding: CGFloat = 10

let stringFromViewModel = “Hello please pass your string here from array…”
    //estimate each cell's height
         height = estimateFrameForText(stringFromViewModel).height + padding
    return CGSize(width: yourDesiredWidth, height: height)
}
...