求教 UILabel 行数不定的高度怎么计算?

问答Zkuns • 于 2015-12-15 07:23:18 +0800 • 最后由 IvanLing2015-12-16 07:05:06 +0800 5102 阅读

最近做tableview的时候遇到一个问题,想实现的结果就是当每一行的内容不一样的时候所得的每一行的高度就不一样。

网上找到很多方法,但是在执行的过程中遇到一个问题,就是我计算lableview的高度计算结果不对的问题。找了很多方法试过了都不对,想求教是我的哪里理解错误了吗?


整个结构就是一个tableview,但是tableview的每一个cell中都有一个labelView。

cell的高度是用下面这个方法设定的 func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat{}

然后我计算labelView的高度方法是 mylabelView.lineBreakMode = .ByWordWrapping mylabelView.sizeToFit

然后获取 mylabelView.height返回给tableView设定cell的高度,但是得到的结果不对,高度小了一部分,所以每一个cell里面的字都显示的不完整,我开始以为应该是cell和mylableView的间距问题,但是我又发现这个缺少的高度是随着mylableView的内容增加而增加。很奇怪所以我觉得应该是sizeToFit没有加上到mylableView的行间距导致内容越多计算的高度缺少越多的问题。 尝试过用别的方法解决结果都一样

还尝试的方法有:

``` mylabelView.sizeThatFits(..)

let a = myContent!.boundingRectWithSize(CGSize(width: self.frame.size.width, height: CGFloat(DBL_MAX)), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: mylabelView.font!, NSForegroundColorAttributeName: UIColor.redColor()], context: nil) return a.height ```


但是最后得到的高度就是少了一些,而且缺少的高度随着mylabelView的内容增加而增加。可能原因是少算了lableView的行间距,但是我不确定。求高人指点,我快被这个问题弄疯了。

ps:

对了使用estimatedRowHeight是可以获得正确的cell的高度的,但是只是在cell中只有lableView的情况下才能正确获得,当我在lableView的下面加上collectionView而且这个collectionView的高度也是不确定的时候这个值就不正确的。 类似于微信的朋友圈的图文的那种形式,所以我还是得自己算出collcetionView的行高和mylabelView的行高,最后求出cell的高度

回复: 3
  • iBcker 2015-12-15 09:56:50 +0800

    方法没问题,初步判断问题出在你计算高度时cell的宽度,也就是里上面写的 self.frame,你可以打印一下这个值看看合你设备是不是相符

  • Zkuns 2015-12-15 16:53:27 +0800

    啊啊,真的是这样,cell的宽度没有不正确。。。。。。。。。。。。。 搞定了,太感谢!!!!!!!

  • IvanLing 2015-12-16 07:05:06 +0800

    之前我也遇过同样的问题。由于我的tableView 是全屏的,所以直接用了

      UIScreen.mainScreen().bounds.width
    

    来计算cell 的宽度。

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,见 Emoji cheat sheet
  • @name 会链接到用户页面,并会通知他
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
Ctrl+Enter