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)
最终,我想要部分显示文本,并有一个显示所有文本的按钮.
谢谢
我已将@ 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)
| 归档时间: |
|
| 查看次数: |
2816 次 |
| 最近记录: |