按UICollectionView的高度设置UITableViewCell的高度

时间:2017-01-16 08:44:04

标签: ios swift uitableview uicollectionview

我遇到了问题:UITableView UITableViewCell UICollectionView,{@ 1}} UICollectionViewCellUITableViewCell。我希望UICollectionView高度对应UICollectionView的高度。 我在这里看到真正的身高 class TimeViewCell: UITableViewCell { @IBOutlet weak var labelTime: UILabel! var dataForShow = [String]() { didSet{ self.collectionView?.reloadData() } } @IBOutlet weak var collectionView: UICollectionView! override func awakeFromNib() { super.awakeFromNib() collectionView.delegate = self collectionView.dataSource = self } } extension TimeViewCell: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return dataForShow.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CustomCollectionCell cell.labelCollection.text = dataForShow[indexPath.row] let realValueHeightOfCollection = collectionView.contentSize.height //when print realValueHeightOfCollection I see 50.0 (if dataForShow.count <4) or 110.0 (if dataForShow.count >5) return cell } }

UITableViewCell

但如何将该高度传递到高度func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cellTime", for: indexPath) as! TimeViewCell let showHour = self.infoWripper.sorted(by: { $0.hour < $1.hour })[indexPath.row] cell.labelTime.text = showHour.showHour() cell.dataForShow = showHour.showFullTime() //here may be set the height of cell? return cell }

class Contact(models.Model):
   created_date = models.DateTimeField(auto_now_add=True)
   updated_date = models.DateTimeField(auto_now=True)
   lastname = models.CharField(max_length=50, null=True, blank=True)
   firstname = models.CharField(max_length=50, null=True, blank=True)
   email = models.EmailField(null=True, blank=True)

class CRecord(models.Model):
   created_date = models.DateTimeField(auto_now_add=True)
   updated_date = models.DateTimeField(auto_now=True)
   place = models.ForeignKey(Place, related_name="record")
   contact = models.ForeignKey(Contact, blank=True, null=True, related_name="records")

class Place(models.Model):
   created_date = models.DateTimeField(auto_now_add=True)
   updated_date = models.DateTimeField(auto_now=True)
   deleted_date = models.DateTimeField(blank=True, null=True)
   name = models.CharField(max_length=100, db_index=True)
   lat = models.FloatField(db_index=True)
   lon = models.FloatField(db_index=True)

upd故事板:enter image description here

3 个答案:

答案 0 :(得分:2)

我有办法为你服务: 我在我的代码中使用了这个并与你共享

在TableView高度方法中:

// MARK: - TableView Delegate Methods:
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        var height: CGFloat = 0.0
        //   //  //print("arrTA[indexPath.row] = \(arrTA[indexPath.row])")
        let dict = arrTA[indexPath.row] as! NSDictionary
        let str = dict[ISSELECTED] as! String
        let strFlage = dict[FLAGE] as! String
        let arrFileCount = dict[DATA]!["file_list"] as! NSArray//dict.objectForKey(DATA)?.objectForKey("file_list").count as NSMutableArray

        if(strFlage == "MA") {

            height = 50.0

        } else {
             height = self.setExpandedViewHeight(arrFileCount.count) + 0.0                
        }
        return height
    }

我在管理身高时使用了这个功能:

func setExpandedViewHeight(intArrCount: Int) -> CGFloat {
        var height: CGFloat = 0.0
        var generatedHeight: Int = 0

        generatedHeight = intArrCount / 3 /// We get number of rows

        if(intArrCount % 3 == 0) {

            height =  CGFloat(generatedHeight) * 100
        } else {

            height = (CGFloat(generatedHeight)  + 1 ) * 100
        }

        return height
    }

我希望您能在最后阅读并调试代码并执行它。

答案 1 :(得分:2)

我通过添加一行来解决我的问题:

tableTime.rowHeight = cell.collectionView.collectionViewLayout.collectionViewContentSize.height
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {...}

中的

答案 2 :(得分:1)

如果您正在使用自动布局,那么您可以试试这个...

self.tableView.estimatedRowHeight = <estimatedRowHeight>;
self.tableView.rowHeight = UITableViewAutomaticDimension;
如果您设置了相对于单元格容器视图的前导,尾随,底部和顶部约束,

UITableViewAutomaticDimension将起作用。

estimatedRowHeight:将此值设置为可能的行高。

设置这些属性后,既不需要实现heightForRowAtIndexpath也不需要estimatedRowHeight