Как установить высоту UITableViewCell в соответствии с размером содержимого UICollectionView?

У меня есть UITableView и внутри, что у меня есть два UICollectionViews,

Мое требование заключается в том, что я должен сначала прокрутить UICollectionView По горизонтали. И я должен прокрутить UITableView вертикально потому что я не хочу прокручивать второй UICollectionView,

В изображении вы можете увидеть это первым (Заголовок 'Папка') UICollectionView Я должен прокрутить горизонтально и второй (заголовок "Продукт") UICollectionView Я не хочу прокручивать вертикально, потому что мне нужно прокрутить UITableView,

И то и другое collectionView находятся в TableViewCell и у меня отключена прокрутка второго UICollectionView,

Я должен добавить и удалить продукт, то я, как я могу установить TableViewSecond Высота ячейки, что содержание должно прийти.

Вот мой код:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if (0 == indexPath.section) {
        var addFolderCell = tableView.dequeueReusableCell(withIdentifier: "AddFolderCell") as? AddFolderCell

        if(nil == addFolderCell) {
            let nib:Array = Bundle.main.loadNibNamed("AddFolderCell", owner: self, options: nil)!
            addFolderCell = nib[0] as? AddFolderCell
        }

        addFolderCell?.collectionView.delegate = self
        addFolderCell?.collectionView.dataSource = self

        return addFolderCell!
    } else {
        let identifier = "CreateFolderCell"
        var createFolderCell = tableView.dequeueReusableCell(withIdentifier: identifier) as? CreateFolderCell

        if(createFolderCell == nil) {
            let nib:Array = Bundle.main.loadNibNamed("CreateFolderCell", owner: self, options: nil)!
            createFolderCell = nib[0] as? CreateFolderCell
        }

        return createFolderCell!
    }
}

//Height for row.
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    //let index : NSIndexPath = NSIndexPath(row: 0, section: 1)
    if 0 == indexPath.section {
        return 135
    }
    return 300
}  

// Высота заголовка.

func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
    return 20
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return sectionsArray[section] as? String
 }
}

extension GroupDataView : UICollectionViewDelegate,UICollectionViewDataSource {
  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
      return 4
  }

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AddFolderCollectionCell", for: indexPath) as! AddFolderCollectionCell

    //cell.backgroundColor = UIColor.white
    cell.layer.borderWidth = 0.4
    cell.layer.borderColor = UIColor.lightGray.cgColor
    cell.layer.cornerRadius = 2
    //CreateCardView(viewCorner: cell.cardView) //cell.cardView
    return  cell
  }
}  

// MARK: макет представления коллекции

extension GroupDataView : UICollectionViewDelegateFlowLayout {

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
     return CGSize(width: 90, height: 130)
  }
}

Что я могу сделать? Как я могу установить высоту для tableView?

1 ответ

Я думаю, что вы можете сделать это, используя несколько шагов:

  1. Подкласс ваш UITableViewCellдавайте назовем это CollectionCellи измените его класс в интерфейсе IB на новое имя подкласса.

  2. Создать выход из UICollectionView в CollectionCell подкласс, где UICollectionView размещен. Давайте назовем это collectionView,

  3. Добавить ограничения для всех сторон collectionView до границ клетки. (сверху, справа, снизу, слева).

  4. Добавить в IB для collectionView ограничение по высоте и создание выхода на CollectionCell тоже. Давайте назовем это collectionViewHeight,

  5. В tableView:cellForRowAtIndexPath: добавить код:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // ...
        // normal cell declarations you wish
        // ...
    
        (cell as! CollectionCell).collectionView.reloadData()
        let height = cell.collectionView.collectionViewLayout.collectionViewContentSize.height
        (cell as! CollectionCell).collectionViewHeight.constant = height
        return cell
    }
    
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100 // <- Your Desired Height
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }
    
Другие вопросы по тегам