在indexpath中使用(\ n)新行字符计算UITableviewCell heightforRow的正确方法?

时间:2015-06-06 18:04:08

标签: ios objective-c uitableview swift

在不知疲倦地试图找到计算行高的解决方案之后,我已经碰壁了。自从iOS 7中的字体大小被折旧以来,我很难计算tableview单元格的近似高度。我的一些单元格使用自动布局,效果很好。那些不使用autolayout的人就是我遇到麻烦的地方。所以这就是我的情景。对于不使用自动布局的单元格,我使用UITableViewCellStyle.Subtitle作为单元格类型。我的一些行使用默认的textlabel.text。我使用下面的方法,它很棒!

继承我通过的约束尺寸:

var contraintSize: CGSize = CGSizeMake(tableView.frame.size.width - 40 ,9999.0)

我打电话给api:

func returnSingleTextLabelHeight (Font : UIFont, Text: String, constraint : CGSize) ->CGFloat {      
           textLabel.font = Font       
           textLabel.text = Text as String
           textLabel.numberOfLines = 0
           textLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
           var expectSize = textLabel.sizeThatFits(constraint)   
           return expectSize.height
        }   

现在我遇到了麻烦。当我使用textLabel.text时,我在文本中使用带有新行字符(重点)的detailTextLabel.text。

   func returnTextLabelHeightAndDetailTextLabelHeigt (Font : UIFont, Text: String,Font2 : UIFont, Text2 : String, constraint : CGSize) ->CGFloat {
        textLabel.font = Font
        textLabel.text = Text
        textLabel.numberOfLines = 0
        textLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
        var expectSize = textLabel.sizeThatFits(constraint)

        detailTextLabel.font = Font2
        detailTextLabel.text = Text2 as String
        detailTextLabel.numberOfLines = 0
        detailTextLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
        var expectSize2 = detailTextLabel.sizeThatFits(constraint)
        return expectSize2.height + expectSize.height
    }

returnTextLabelHeightAndDetailTextLabelHeight 有效,但我的问题是它大部分时间都会计算高度。我很难找到产生类似一致高度结果的东西,就像 returnSingleTextLabelHeight 那样。

我一遍又一遍地试过boundingRectWithSize,而且我没有得到一致的高度结果。这里的答案提出了一个很好的观点:https://stackoverflow.com/a/25941139/4854178当我删除文本中的新行间距时,我确实得到了一致的高度结果:

我想在detailTextLabel中添加新的行字符,因为格式化看起来更好。我不想创建多个单元格只是为了显示我想要实现的效果。最后,textlabel和detailTextLabel具有不同的字体类型,即粗体而非粗体。我的问题很长,所以我非常感谢你花时间思考并阅读它。希望我很清楚。谢谢!

0 个答案:

没有答案