获取行数UITextView而不使用"\n"?

Tua*_* Vu 0 uitextview ios swift

我有一个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)
Run Code Online (Sandbox Code Playgroud)

当然,这段代码只会在上面的代码后返回1.

let desString = self.descriptionTextView.text
let numLines = desString.componentsSeparatedByString("\n")
println(numLines.count)
Run Code Online (Sandbox Code Playgroud)

这段代码崩溃了.

 let numLines = self.descriptionTextView.contentSize.height / self.descriptionTextView.font.leading
Run Code Online (Sandbox Code Playgroud)

最终,我想要部分显示文本,并有一个显示所有文本的按钮.

谢谢

Arb*_*tur 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])
Run Code Online (Sandbox Code Playgroud)

我使用这个扩展,以使字符串的大小限制为宽度:

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))
    }
}
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下你可以这样做:

let numLines = desString.sizeForWidth(descriptionTextView.contentSize.width, font: descriptionTextView.font).height / descriptionTextView.font.lineHeight
Run Code Online (Sandbox Code Playgroud)