我有一个textView,我需要行数,或者sizeToFit才变成sizeToFit。我已经尝试在textView中检查换行符的数量“\ n”。然而,textView中的文本已经被解析了bc它是非常混乱的来自服务器有大量的html代码和可怕的换行符,我不得不使用“\ n”的replaceOccurence来删除换行符以使文本成为一个好段落。
var rawString = self.selectedProduct.description
var cleanString = rawString?.stringByReplacingOccurrencesOfString("\n", withString: " ", options: NSStringCompareOptions.LiteralSearch, range: nil)
此代码当然只会在上述代码后返回1。
let desString = self.descriptionTextView.text
let numLines = desString.componentsSeparatedByString("\n")
println(numLines.count)
这段代码崩溃了。
let numLines = self.descriptionTextView.contentSize.height / self.descriptionTextView.font.leading
最终,我想要部分显示文字,并有一个显示所有文字的按钮。
谢谢
答案 0 :(得分:5)
我已经将@ aBilal17的评论转换为非贬值的东西并且迅速。
// This gives you the size of that string
let font = UIFont.systemFontOfSize(11)
let style = NSMutableParagraphStyle()
style.lineBreakMode = NSLineBreakMode.ByWordWrapping
let size = someString.sizeWithAttributes([NSFontAttributeName: font, NSParagraphStyleAttributeName: style])
我使用这个扩展来获得限制为宽度的字符串的大小:
extension String {
func sizeForWidth(width: CGFloat, font: UIFont) -> CGSize {
let attr = [NSFontAttributeName: font]
let height = NSString(string: self).boundingRectWithSize(CGSize(width: width, height: CGFloat.max), options:.UsesLineFragmentOrigin, attributes: attr, context: nil).height
return CGSize(width, ceil(height))
}
}
所以在你的情况下,你可以这样做:
let numLines = desString.sizeForWidth(descriptionTextView.contentSize.width, font: descriptionTextView.font).height / descriptionTextView.font.lineHeight