如何在自定义UITableViewCell中获取UILabel的字体大小?

时间:2017-04-26 06:57:16

标签: ios swift uifont

我的UITableView包含具有自定义类的单元格,例如HistoryCell

Cell UI元素由界面构建器组成,并与类属性链接:

@IBOutlet var contentLabel: UILabel!

由于contentLabel是多行,我的任务设置正确,因为这些单元格的高度。我想使用String.boundingRect方法计算身高,但需要UIFont

我可以在开发时将字体属性从界面构建器复制到代码,但如果将来更改字体,则需要修改代码

相反,我想从内存单元格中获取字体,我创建静态实例并将其用于返回字体:

class HistoryCell: UITableViewCell {
    private static let instance = HistoryCell()

    static func textFont() -> UIFont {
        return instance.contentLabel.font
    }
}

但是当我调用HistoryCell.textFont方法时,contentLabelnil

为什么它为零?
我可以用其他方式获取单元格字体吗?

2 个答案:

答案 0 :(得分:0)

我猜您已使用 IBOutlet 连接 contentLabel ,并且在创建HistoryCell实例时,它不会加载nib文件引用。由于这个,它将返回contentLabel的

你也可以用

做同样的事
open func textFont() -> UIFont {
   return self.titlelabel.font
} 

并使用dequeue func

接收的单元格对象调用此函数
let cell = tableView.dequeueReusableCell(withIdentifier: "ParallexCell", for: indexPath) as! HistoryCell
let font = cell.textFont()

答案 1 :(得分:0)

我找到了没有字体计算的简单解决方案:

func tableView(_ tableView: UITableView, heightForRowAt
    indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}