2017-04-26 122 views
1

我的UITableView与具有自定义类细胞,例如HistoryCell如何在自定义UITableViewCell中获取UILabel的字体大小?

细胞的UI元素是由在Interface Builder与类属性链接:

@IBOutlet var contentLabel: UILabel! 

我的任务是正确的高度设定,因为这种细胞contentLabel是多行。我想用String.boundingRect法计算的高度,但它需要UIFont

我就可以从界面生成器复制字体属性的代码在开发时间,但如果字体将在未来被改变,代码将需要修复

相反,我想从内存中获取字体细胞
我创建静态实例,并用它来回报字体:

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

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

但是当我调用​​方法,contentLabelnil

为什么它是零?
我可以用另一种方式获取单元元素字体吗?

+0

你检查了co将IBOutlet连接到contentLable? – karthikeyan

+0

您必须确保在视图“加载”后检查它。例如,在'awakeFromNib()' – Tobonaut

+0

@Tobonaut尝试它,是否有可能当tableview单元格在storyboard不在自己的xib文件中? –

回答

0

我想你已经使用IBOutlet中连接内容标签,当你创建HistoryCell的情况下,它不会加载笔尖文件引用。正因为如此它回报你无对象内容标签

你可以做同样的与

open func textFont() -> UIFont { 
    return self.titlelabel.font 
} 

,并呼吁使用细胞的对象,它是用出队FUNC

let cell = tableView.dequeueReusableCell(withIdentifier: "ParallexCell", for: indexPath) as! HistoryCell 
let font = cell.textFont() 
0

我收到这个功能找到没有字体计算的简单解决方案:

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