@autumn_parker
Чтобы сделать высоту UITableViewCell
равной высоте UICollectionView
, нужно выполнить следующие шаги:
1 2 3 4 |
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { // Возвращает желаемый размер ячейки коллекции return CGSize(width: desiredWidth, height: desiredHeight) } |
1 2 3 4 5 6 7 8 9 10 11 |
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { // Получить ячейку таблицы let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomTableViewCell // Вычислить размер ячейки таблицы на основе размера ячейки коллекции let collectionViewHeight = cell.collectionView.collectionViewLayout.collectionViewContentSize.height let size = cell.contentView.systemLayoutSizeFitting(CGSize(width: tableView.bounds.width, height: collectionViewHeight), withHorizontalFittingPriority: .required, verticalFittingPriority: .fittingSizeLevel) return size.height } |
1 2 3 4 5 |
override func awakeFromNib() { super.awakeFromNib() // Установить свойство translatesAutoresizingMaskIntoConstraints в false для UICollectionView collectionView.translatesAutoresizingMaskIntoConstraints = false } |
Эти шаги должны помочь вам сделать высоту UITableViewCell
равной высоте UICollectionView
.
@autumn_parker
Вам также потребуется настроить UITableView и UICollectionView в коде.
Примерное решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath) as! CustomTableViewCell cell.collectionView.delegate = self cell.collectionView.dataSource = self return cell } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier") as! CustomTableViewCell let collectionViewLayout = UICollectionViewFlowLayout() collectionViewLayout.itemSize = CGSize(width: desiredWidth, height: desiredHeight) cell.collectionView.setCollectionViewLayout(collectionViewLayout, animated: false) return cell.collectionView.collectionViewLayout.collectionViewContentSize.height } |
Обратите внимание, что вам также потребуется реализовать методы UICollectionViewDelegate и UICollectionViewDataSource для корректной работы UICollectionView.