我有一个TableViewController,它包含三个不同的自定义单元格。对于第一个单元格,我想要包含一个水平滚动的CollectionView,第二个单元格包含一个CollectionView,第三个单元格包含一个垂直的CollectionView。我写这样的代码:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.section == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("TableViewCell1") as! HomePageTableViewCell1
return cell
}
else if indexPath.section == 1 {
let cell = tableView.dequeueReusableCellWithIdentifier("TableViewCell2") as! HomePageTableViewCell2
return cell
}
else {
let cell = tableView.dequeueReusableCellWithIdentifier("TableViewCell3") as! HomePageTableViewCell3
return cell
}
}
它的工作方式与我想的一样,但我不确定这是实现我想要的最佳方式吗?因为我是Swift的新手,也许有更好的方法可以做到这一点?
其次,对于这三个单元格,我想基于内容保留动态高度。例如,第一个单元格包含一个高度为260的ImageView,第二个单元格包含一个高度为140的ImageView。第三个单元格包含一个CollectionView,它将返回4行,每行中有一个高度为96的ImageView。我所做的是:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.section == 0 {
return 260
}
else if indexPath.section == 1 {
return 140
}
else {
return 500
}
}
但这意味着我必须在我知道内容高度的情况下对这些高度进行硬编码。但是,如果我不知道高度,如果第三个单元格将返回5行,这意味着500还不够,那么我应该怎么做才能让单元格达到动态高度。
答案 0 :(得分:1)
这是可能的:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.section == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("TableViewCell1") as! HomePageTableViewCell1
let string1 = "blablabla"
let charCountString1 = string1.character.characters.count
tableView.rowHeight = CGFloat(charCountString1)
return cell
}
else if indexPath.section == 1 {
let cell = tableView.dequeueReusableCellWithIdentifier("TableViewCell2") as! HomePageTableViewCell2
let imageHeight = imageView.frame.height
tableView.rowHeight = CGFloat(imageHeight)
return cell
}
else {
let cell = tableView.dequeueReusableCellWithIdentifier("TableViewCell3") as! HomePageTableViewCell3
let string3 = "ldsakjfalksdjflk"
let charCountString3 = string3.character.characters.count
tableView.rowHeight = CGFloat(charCountString3)
return cell
}
}
答案 1 :(得分:0)
您可以始终在内容的基础上获得tableView的动态高度,无需返回静态高度,只需在单元格中正确设置约束,并始终使用首选优先级进行内容拥抱内容 - compressionResistance。 / p>
在-viewDidLoad中 刚设置
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 60; // or whatever is suitable for you
你也可以参考Ray Wenderlich的教程 Self-sizing Table View Cells