Swift:在 sizetofit 之后无法获得标题单元格标签的正确高度
Posted
技术标签:
【中文标题】Swift:在 sizetofit 之后无法获得标题单元格标签的正确高度【英文标题】:Swift: Cannot get correct height of header cell's label after sizetofit 【发布时间】:2015-05-12 07:05:03 【问题描述】:我已将sizeToFit()
添加到 UILabel,但是我无法获得无法显示所有文本的正确高度。它只显示“学术、行政、教学和”
测试对象:iphone 6
编码:
class eventsViewController: UITableViewController
var headerName: Array<String> = ["Academic, administrative, teaching and learning support units"]
override func viewDidLoad()
self.tableView = UITableView(frame: self.tableView.frame, style: .Grouped)
self.view.backgroundColor = UIColor(white: 0.9, alpha: 1.0)
self.tableView.estimatedRowHeight = 102
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
var headerCell = tableView.dequeueReusableCellWithIdentifier("EventsHeaderCell") as! UITableViewCell!
if headerCell == nil
headerCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "EventsHeaderCell")
headerCell!.backgroundColor = UIColor(white: 0.9, alpha: 1.0)
headerCell!.textLabel?.text = headerName[section]
headerCell!.textLabel?.numberOfLines = 0
headerCell!.textLabel?.lineBreakMode = .ByWordWrapping
headerCell!.textLabel?.sizeToFit()
headerCell!.userInteractionEnabled = false;
headerCell!.sizeToFit()
return headerCell!
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
return headerName.count
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
var headerLabel:UILabel = UILabel()
headerLabel.text = headerName[section]
headerLabel.numberOfLines = 0
headerLabel.lineBreakMode = .ByWordWrapping
headerLabel.sizeToFit()
return headerLabel.frame.size.height
【问题讨论】:
尝试在调用 sizeToFit() 之前将其添加到视图中(如果您不希望屏幕出现故障,可以将其设置为透明 实际上,它显示文本,但不是全部 headerLabel 变量在您的代码中没有显示任何内容,因为它甚至没有显示在屏幕上 - 我知道您只是使用这个变量来计算大小,但仍然 - 我 99% 确定sizeToFit 方法仅适用于实际位于视图层次结构中的 UILabel。 我已经尝试过您提到的内容,但它仍然对我不起作用,并且其他文本部分已被隐藏。显示后仍然返回相同的宽度或者它在视图层次结构中 您希望标签有多行吗?您可能应该设置一个具有预期宽度和较大高度的框架 【参考方案1】:问题是不间断的长文本导致在sizeToFit()
之后获得不间断的 UILabel 高度。但是,它显示文本在 iPhone 6 和 ios 8 中已被中断。
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
var headerLabel:UILabel = UILabel()
var newline: CGFloat = 1
headerLabel.text = headerName[section]
headerLabel.numberOfLines = 0
headerLabel.lineBreakMode = .ByWordWrapping
headerLabel.sizeToFit()
if self.view.frame.width <= headerLabel.frame.width
newline = ceil(headerLabel.frame.width/self.view.frame.width)
let tblHeaderHeight = (headerLabel.frame.size.height * newline) + ios7_8Info.getEventHeaderCellSpacingHeight() as CGFloat
return tblHeaderHeight
【讨论】:
以上是关于Swift:在 sizetofit 之后无法获得标题单元格标签的正确高度的主要内容,如果未能解决你的问题,请参考以下文章
iOS lable上的文字自适应(sizetofit)后,获得每一行的内容。返回一个包含所有行内容的数组。