У меня есть представление коллекции, ширину ячейки которой необходимо установить автоматически в зависимости от размера метки.Я перепробовал много подходов, но ни один из них, похоже, не работает для меня.
Вот как это выглядит изначально: 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 для установки размера ячеек в любом месте.Есть идеи?Спасибо