Как установить высоту 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 ответ
Я думаю, что вы можете сделать это, используя несколько шагов:
Подкласс ваш
UITableViewCell
давайте назовем этоCollectionCell
и измените его класс в интерфейсе IB на новое имя подкласса.Создать выход из
UICollectionView
вCollectionCell
подкласс, гдеUICollectionView
размещен. Давайте назовем этоcollectionView
,Добавить ограничения для всех сторон
collectionView
до границ клетки. (сверху, справа, снизу, слева).Добавить в IB для
collectionView
ограничение по высоте и создание выхода наCollectionCell
тоже. Давайте назовем этоcollectionViewHeight
,В
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 }