答案 0 :(得分:3)
您需要定义heightForHeaderInSection
并自定义viewForHeaderInSection
。您可以将所有标题高度修复为足以容纳所有行的值,也可以计算特定标题所需的高度(如下所示)。
let headerFont:UIFont = UIFont.systemFontOfSize(14);
let headerTexts = ["one line", "two line test123 sadfjklsadf asdjfklasjdflk asdfjklasdjfl asdfjklsadf"];
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 2;
}
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return heightOfHeaderText(headerTexts[section]);
}
func heightOfHeaderText(text:String) -> CGFloat{
return NSString(string: text).boundingRectWithSize(
CGSizeMake(self.tableView.frame.size.width, 999),
options: NSStringDrawingOptions.UsesLineFragmentOrigin,
attributes: [NSFontAttributeName : headerFont],
context: nil).size.height;
}
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerLabel:UILabel = UILabel.init(frame: CGRectMake(0, 0, tableView.frame.size.width, self.tableView(tableView, heightForHeaderInSection: section)));
headerLabel.numberOfLines = 0;
headerLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping;
headerLabel.font = headerFont;
headerLabel.text = headerTexts[section];
return headerLabel;
}
答案 1 :(得分:1)
制作带有标签的自定义视图。并使用viewForHeaderInSection委托方法将文本分配给该标签并返回此视图。
编辑:
答案 2 :(得分:0)
有一种直接的方法可以避免额外的计算,在将您的UITableView创建为分组-
后,重写UITableViewDelegate的3种方法func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return headerTexts[section]
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerLabel = view as? UITableViewHeaderFooterView {
headerLabel.numberOfLines = 0
headerLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
headerLabel.font = headerFont
headerLabel.text = headerTexts[section]
}
}