По некоторым причинам я не могу правильно отображать некоторые элементы из коллекции в ячейке табличного представления при использовании бета-версии Xcode 10. Я перепробовал все, что знаю за последние 4 дня.
Я сделал небольшой пример проекта, чтобы понять, в чем заключается моя проблема.
Полный код здесь, если кто-то хочет запустить его локально: https://github.com/adrianstanciu24/CollectionViewInsideUITableViewCell
Сначала я добавляю табличное представление с 2 различными ячейками с изменяемым размером, первая ячейка имеет представление коллекции и метку:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.estimatedRowHeight = 44
tableView.rowHeight = UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "collCell") as! CollectionTableViewCell
cell.collectionView.collectionViewLayout.invalidateLayout()
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "normalCell")!
return cell
}
}
}
Вот ячейка с определенным видом коллекции. Это также имеет ограничение по высоте, которое я обновил в layoutSubviews
:
class CollectionTableViewCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate {
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var collectionViewHeightConstraint: NSLayoutConstraint!
override func awakeFromNib() {
super.awakeFromNib()
collectionView.delegate = self
collectionView.dataSource = self
if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
}
}
override func layoutSubviews() {
super.layoutSubviews()
collectionViewHeightConstraint.constant = collectionView.collectionViewLayout.collectionViewContentSize.height
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "taskCell", for: indexPath as IndexPath) as! TaskCollectionViewCell
cell.name.text = "Task_" + String(indexPath.row)
return cell
}
}
Ниже приведен скриншот с ограничением представления коллекции и тем, как выглядит раскадровка:
А вот как это выглядит при запуске:
Ячейки сдавлены, и ярлык сверху исчезает. Я хочу, чтобы представление коллекции увеличивалось, чтобы отображались все элементы, а также делалось изменение размера ячейки табличного представления, но в данный момент этого не происходит, и я не могу понять, где проблема.