我遇到了问题:UITableView
UITableViewCell
UICollectionView
,{@ 1}} UICollectionViewCell
,UITableViewCell
。我希望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)
答案 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
。