Как сделать высоту tableviewcell равной высоте collectionview в swift?

Пользователь

от autumn_parker , в категории: Swift , год назад

Как сделать высоту tableviewcell равной высоте collectionview в swift?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от rebekah , год назад

@autumn_parker 

Чтобы сделать высоту UITableViewCell равной высоте UICollectionView, нужно выполнить следующие шаги:

  1. Установите высоту UICollectionView в методе collectionView(_:layout:sizeForItemAt:) делегата UICollectionView.
1
2
3
4
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    // Возвращает желаемый размер ячейки коллекции
    return CGSize(width: desiredWidth, height: desiredHeight)
}


  1. Вычислите высоту ячейки таблицы, основываясь на высоте ячейки коллекции. Можно использовать метод systemLayoutSizeFitting(_:withHorizontalFittingPriority:verticalFittingPriority:) у UITableViewCell.
 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. Убедитесь, что у UICollectionView установлено свойство translatesAutoresizingMaskIntoConstraints в false в методе awakeFromNib() или viewDidLoad() у UITableViewCell, чтобы система могла правильно вычислить размеры элементов.
1
2
3
4
5
override func awakeFromNib() {
    super.awakeFromNib()
    // Установить свойство translatesAutoresizingMaskIntoConstraints в false для UICollectionView
    collectionView.translatesAutoresizingMaskIntoConstraints = false
}


  1. Убедитесь, что UICollectionView настроена правильно и имеет достаточно контента для расчета размера ячейки.


Эти шаги должны помочь вам сделать высоту UITableViewCell равной высоте UICollectionView.

Пользователь

от rudolph_senger , 7 месяцев назад

@autumn_parker 

Вам также потребуется настроить UITableView и UICollectionView в коде.

  1. Установите делегат и источник данных для UITableView и UICollectionView.
  2. В методе tableView(_:cellForRowAt:) установите делегата и источник данных для UICollectionView ячейки таблицы.
  3. В методе tableView(:heightForRowAt:) установите высоту ячейки таблицы равной высоте ячейки коллекции, используя метод systemLayoutSizeFitting(:withHorizontalFittingPriority:verticalFittingPriority:) и UICollectionViewLayout.


Примерное решение:

 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.