我正在尝试使用多行标签来制作表格视图。不幸的是,我没有运气 - 细胞似乎根本没有调整大小,虽然我得到多线标签。
我的TableViewController的Swift代码:
import UIKit
class QuestionsController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 100.0
tableView.rowHeight = UITableViewAutomaticDimension
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return questionsData.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("QuestionCell", forIndexPath: indexPath) as! BasicQuestionCell
let question = questionsData[indexPath.row] as Question
cell.titleLabel.text = question.content
return cell
}
}
结果:
答案 0 :(得分:6)
正如你没有提到的那样,如果你使用的是自动布局,我假设你正在使用自动布局,并对单元格内的标签给出了必要的约束。
现在只需删除以下两行来自viewDidLoad():
tableView.estimatedRowHeight = 100.0
tableView.rowHeight = UITableViewAutomaticDimension
并添加 默认功能,按以下方式进行操作:
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return tableView.rowHeight
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
<强>结果:强>
答案 1 :(得分:2)
您可以执行多项操作来设置UICellView以匹配其标签的高度。如果你知道确切的高度,你可以简单地实现:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
// return the height there
return 100.0;
}
如果你不知道高度,你需要在运行时获得它的高度,并在相同的功能中重新开始。
有多种方法可以定义细胞的结构。我假设您正在使用动态原型并且只是使用基本样式单元格。
在上面的方法中你可以这样做:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if let hieght = tableView.cellForRowAtIndexPath(indexPath)?.textLabel?.frame.height {
return hieght;
} else {
print("Couln't adjust the height")
return 100.0;
}
}
如果您以不同的方式定义单元格,则只需实现相同的方法,但返回单元格内标签的高度。