0

我有一个UITableView和里面我有两个UICollectionViews.

我的要求是我必须先UICollectionView水平滚动。而且我必须UITableView垂直滚动,因为我不想滚动 Second UICollectionView

在 Image 中,您可以看到第一个 (Header 'Folder')UICollectionView我必须水平滚动,第二个 (Header 'Product')UICollectionView我不想垂直滚动,因为我必须滚动 Complete UITableView

两者collectionView都在TableViewCell并且我禁用了 second 的滚动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 的高度?

4

1 回答 1

2

我认为您可以使用以下几个步骤来完成此操作:

  1. 子类化你的UITableViewCell,让我们命名它CollectionCell,并将它在 IB 接口中的类更改为新的子类名称。

  2. 创建从子类UICollectionView到放置的出口。让我们命名它。CollectionCellUICollectionViewcollectionView

  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
    }
    
于 2017-08-10T13:54:09.907 回答