2015-10-26 135 views
0

我一直在研究这个问题一天以上,而且我可以诚实地说,我完全被这个问题解释为什么这个工作并不像我期望的那样工作。根据UILabel内容调整UITableViewCell高度的大小

我试图有一个UITableViewCell扩展,当选择到正确的大小基于其中的UILabel。我用下面的代码,以确定的UILabel需要的大小:

extension UILabel { 

    func requiredHeight() -> CGFloat{ 

     let label:UILabel = UILabel(frame: CGRectMake(0, 0, self.frame.width, CGFloat.max)) 
     label.text = self.text 
     label.numberOfLines = 0 
     label.font = self.font 

     label.sizeToFit() 


     print("Final Size - \(label.frame.height)") 
     return label.frame.height + 10 
    } 
} 

我的问题是,尽管这样的尺寸 - 当细胞是“heightForRowAtIndexPath”法内调整 - 它仍然是不正确的大小和字符串被截断,这可以在下面的图片中看到。

enter image description here

要注意的 - 我尽快收集细胞所需要的尺寸作为视图加载和文本已经填充到的UILabel。

requiredHeight = overviewLabel.requiredHeight() 
     if requiredHeight > overviewCell.frame.height { 
      expander.hidden = false 
     } else { 
      expander.hidden = true 
     } 

有关如何解决这个问题的任何建议将不胜感激。

回答

2

试试这个片段。只需提供字体和大小

斯威夫特3.X

func requiredHeight() -> CGFloat{ 
    let font = UIFont(name: "Helvetica", size: 16.0) 
    let label:UILabel = UILabel(frame: CGRect(x:0, y:0, width:200, height:CGFloat.greatestFiniteMagnitude)) 
    label.numberOfLines = 0 
    label.lineBreakMode = NSLineBreakMode.byWordWrapping 
    label.font = font 
    label.text = self.text 
    label.sizeToFit() 
    return label.frame.height + //Add some space as a part of your bottom and top constraint 
} 

斯威夫特的确切名称2.2

func requiredHeight() -> CGFloat{ 
    let font = UIFont(name: "Helvetica", size: 16.0) 
    let label:UILabel = UILabel(frame: CGRectMake(0, 0, 200, CGFloat.max)) 
    label.numberOfLines = 0 
    label.lineBreakMode = NSLineBreakMode.ByWordWrapping 
    label.font = font 
    label.text = self.text 
    label.sizeToFit() 
    return label.frame.height + //Add some space as a part of your bottom and top constraint 
} 

假设你的拉贝l与顶部和底部约束为5和5分别,他们做出return语句作为

return label.frame.height + 10 

注意: - 宽度应该是你想要的标签的宽度。它应该是根据你的UITableViewUIView

+0

哦,哇,就这么简单。但是,请问为什么需要手动定义字体?我觉得它非常奇怪,我无法使用'label.font = self.font' –

+0

它对你有用吗? –

+0

我也曾经遇到同样的问题。可能是一些奇怪的问题,label.font = self.font不工作。我搜索了一些只能提供你的UILabel正在使用的确切字体和大小的地方,而且只有很少的限制条件。至少为我工作,你呢? –

相关问题