Пользовательский размер UICollectionViewCell в соответствии с текстом метки - PullRequest
0 голосов
/ 10 марта 2020

Я создал xib UICollectionViewCell и хотел бы, чтобы ячейка автоматически настраивалась в соответствии с длиной текста метки, как показано на рисунке ниже.

https://i.stack.imgur.com/WN4Ua.png

На рисунке показано, что я сделал на прототипе клетки. Но как бы я ни старался, клетка просто сохраняла один и тот же размер, когда я вместо нее использовал xib.

Ответы [ 2 ]

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

Вы также можете просто реализовать это в sizeForItem. Просто вставьте 'yourString' и 'yourFont':

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

    let width = yourString.size(withAttributes: [NSAttributedString.Key.font: yourFont]).width
    return CGSize(width: width, height: 20) 
}

, вам может потребоваться добавить некоторое пространство к ширине из-за углового радиуса ячейки

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

реализовать этот делегат UICollectionViewDelegateFlowLayout

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

        let market = self.markets[indexPath.row]
        let label = UILabel(frame: CGRect.zero)
        label.text =  market
        label.sizeToFit()
        return CGSize(width: label.frame.width, height: 25)
    }

или

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let text = NSAttributedString(string: markets[indexPath.row])
        return CGSize(width: text.size().width, height: 25)
    }
...