Как установить автоматический размер ширины ячеек представления коллекции на основе внутреннего содержимого? - PullRequest
0 голосов
/ 29 января 2019

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

Вот как это выглядит изначально: https://ibb.co/Nn0BtyG

Это то, к чему я иду: https://ibb.co/ckKk9R5

Вот как это выглядит после добавления кода авторазмера: https://ibb.co/vLSyCD6

Код авторазмера:

    // Layout
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .vertical
    if #available(iOS 10.0, *) {
        layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
    } else {
        layout.estimatedItemSize = CGSize(width: self.tagsCollectionView.bounds.width, height: 50)
    }
    self.tagsCollectionView.collectionViewLayout = layout

Вот весь мой код:

import UIKit

class TagsCollection: UICollectionView, UICollectionViewDataSource, UICollectionViewDelegate{

let reuseIdentifier = "TagCell" // also enter this string as the cell identifier in the storyboard
var arrayOfTags: [String] = Array()
var phassetID : String!

func displayTags(){
    do{
        let assetId = phassetID
        let allImagesTagsData = try [Images]()
        let assetIndex = allImagesTagsData.firstIndex(where: { $0.id == assetId })

        if assetIndex != nil{
            arrayOfTags = Array(allImagesTagsData[assetIndex!].tags)
        }
    }catch{
    print("Tag Display View Error: \(error)")
    }
}

func setAssetID(assetID: String){
    phassetID = assetID
}

override func awakeFromNib() {
    self.dataSource = self
    self.delegate = self

}

// MARK: - UICollectionViewDataSource protocol

// tell the collection view how many cells to make
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    displayTags()
    return arrayOfTags.count
}

// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {


    // get a reference to our storyboard cell
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! TagCell

    // Use the outlet in our custom class to get a reference to the UILabel in the cell
    cell.myLabel.text = arrayOfTags[indexPath.item]
    cell.backgroundColor = UIColor.cyan // make cell more visible in our example project

    return cell
}

// MARK: - UICollectionViewDelegate protocol

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    // handle tap events
    print("You selected cell #\(indexPath.item)!")
}
    }

Как видите, я не использовал sizeforItem at Delegate для установки размера ячеек в любом месте.Есть идеи?Спасибо

...