Проблема динамической высоты UICollectionview - PullRequest
0 голосов
/ 08 мая 2018

Я хочу добиться следующего результата enter image description here

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

В: - Как получить полную высоту представления коллекции, когда прокрутка отключена?

Я пробовал следующий код для получения высоты, и он возвращает 30.0.

let height = self.collectionTags.collectionViewLayout.collectionViewContentSize.height; // 30.0 

А этот возвращает 0.0

let height = self.collectionTags.contentSize.height // 0.0

Вот код макета коллекции viewview

if let flowLayout = collectionTags.collectionViewLayout as? UICollectionViewFlowLayout {
    flowLayout.estimatedItemSize = CGSize(width: 1, height: 30.0)
    flowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize
}

1 Ответ

0 голосов
/ 08 мая 2018

Я столкнулся с подобной проблемой. Решением для меня было добавить height constraint в collectionView и вычислить его высоту в зависимости от элементов, которые я хотел отобразить. Вот фрагмент, который я создал:

// Items that will be displayed inside CollectionView are called tags here
// Total tags width
var tagWidth:CGFloat = 0

// Loop through array of tags
for tag in self.tagsArray {

  // Specifying font so we can calculate dimensions
  let tagFont = UIFont(name: "Cabin-Bold", size: 17)!
  let tagAttributes: [String : Any]? = [
    NSFontAttributeName: tagFont,
    NSForegroundColorAttributeName: UIColor.white,
    ]

  // Get text size
  let tagString = tag as NSString
  let textSize = tagString.size(attributes: tagAttributes ?? nil)

  // Add current tag width + padding to the total width
  tagWidth += (textSize.width + 10)
}

// Calculate number of rows
var totalRows = tagWidth / (self.bounds.width - 40)
totalRows = totalRows.rounded(.up)

// Calculate height and apply it to the CollectionView height constraint
estimatedCollectionViewHeight = Float(CGFloat(totalRows * 29))
collectionViewHeight.constant = CGFloat(estimatedCollectionViewHeight)
...