Измените горизонтальные значения uicollectionivew width на тексте uiLabel - PullRequest
0 голосов
/ 06 марта 2019

У меня горизонтальный вид коллекции. Каждая ячейка имеет метку и изображение.

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

Как изменить ширину ячейки представления представления коллекции в соответствии с содержащимися в ней данными, чтобы метка не перекрывала изображение?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Сначала вычислите ширину текста надписи с помощью шрифта, связанного с текстом.

extension String {
    func size(with font: UIFont) -> CGSize {
        let fontAttribute = [NSAttributedString.Key.font: font]
        let size = self.size(withAttributes: fontAttribute)
        return size
    }
}

Возвращает вычисленную ширину вместе с высотой collectionView в collectionView(_, collectionViewLayout:_, sizeForItemAt)

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

    // Note: Margins are spaces around the cell
    // model[indexPath.row].text is the text of label to be shown
    let newWidth = model[indexPath.row].text.size(with: labelFont!).width + margins + imageView.width 
    return CGSize(width: newWidth, height: collectionView.bounds.height)
}

Примечание:

Не забыли подтвердить свой viewController на UICollectionViewDataSource, UICollectionViewDelegateFlowLayout.

0 голосов
/ 06 марта 2019

CollectionView имеет метод делегата, который возвращает размер ячейки.

Пожалуйста, унаследуйте UICollectionViewDelegateFlowLayout и реализуйте следующий метод.

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

Вы можете вычислить ширину метки и вернуть ее вфункция.

Надеюсь, это поможет.

...