我必须找到UITextView
的行数。 numberOfLines
上没有可用的属性,例如UITextView
。我使用以下公式,但它不起作用。有人对此有所了解吗?
int numLines = txtview.contentSize.height/txtview.font.lineHeight;
答案 0 :(得分:19)
如果您使用的是iOS 3,则需要使用leading
属性:
int numLines = txtview.contentSize.height / txtview.font.leading;
如果您使用的是iOS 4,则需要使用lineHeight
属性:
int numLines = txtview.contentSize.height / txtview.font.lineHeight;
而且,正如@thomas指出的那样,如果你需要一个确切的结果,要小心四舍五入。
答案 1 :(得分:1)
您可以查看UITextView的contentSize属性以获取其高度 以像素为单位的文本,除以UITextView字体的行间距即可得到 UIScrollView总数(打开和关闭屏幕)中的文本行数,包括换行和换行文本。
int numLines = txtview.contentSize.height/txtview.font.leading;
答案 2 :(得分:1)
Swift 4 使用UITextView
计算UITextInputTokenizer
中的行数的方式:
public extension UITextView {
/// number of lines based on entered text
public var numberOfLines: Int {
guard compare(beginningOfDocument, to: endOfDocument).same == false else {
return 0
}
let direction: UITextDirection = UITextStorageDirection.forward.rawValue
var lineBeginning = beginningOfDocument
var lines = 0
while true {
lines += 1
guard let lineEnd = tokenizer.position(from: lineBeginning, toBoundary: .line, inDirection: direction) else {
fatalError()
}
guard compare(lineEnd, to: endOfDocument).same == false else {
break
}
guard let newLineBeginning = tokenizer.position(from: lineEnd, toBoundary: .character, inDirection: direction) else {
fatalError()
}
guard compare(newLineBeginning, to: endOfDocument).same == false else {
return lines + 1
}
lineBeginning = newLineBeginning
}
return lines
}
}
public extension ComparisonResult {
public var ascending: Bool {
switch self {
case .orderedAscending:
return true
default:
return false
}
}
public var descending: Bool {
switch self {
case .orderedDescending:
return true
default:
return false
}
}
public var same: Bool {
switch self {
case .orderedSame:
return true
default:
return false
}
}
}