在不知疲倦地试图找到计算行高的解决方案之后,我已经碰壁了。自从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具有不同的字体类型,即粗体而非粗体。我的问题很长,所以我非常感谢你花时间思考并阅读它。希望我很清楚。谢谢!