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 之后无法获得标题单元格标签的正确高度的主要内容,如果未能解决你的问题,请参考以下文章

sizeToFit()使用心得

UIStackView sizeToFit 无法按预期工作

iOS lable上的文字自适应(sizetofit)后,获得每一行的内容。返回一个包含所有行内容的数组。

调用 sizeToFit 时,UIButton 无法使用自定义字体正确调整高度

sizeToFit 和约束

SizeToFit() 不能与 \n 一起正常工作?