我必須找到一個UITextView
的行數。沒有可用的財產,如numberOfLines
,UITextView
。我使用下面的公式,但它不起作用。有人對此有所瞭解嗎?如何找到UITextView的行數
int numLines = txtview.contentSize.height/txtview.font.lineHeight;
我必須找到一個UITextView
的行數。沒有可用的財產,如numberOfLines
,UITextView
。我使用下面的公式,但它不起作用。有人對此有所瞭解嗎?如何找到UITextView的行數
int numLines = txtview.contentSize.height/txtview.font.lineHeight;
如果您使用的是iOS 3,您需要使用leading
屬性:
int numLines = txtview.contentSize.height/txtview.font.leading;
如果您使用的是iOS 4,您需要使用lineHeight
屬性:
int numLines = txtview.contentSize.height/txtview.font.lineHeight;
而且,正如@托馬斯指出的那樣,如果您需要精確的結果,請小心四捨五入。
你可以看看你的UITextView的contentSize屬性來獲取以像素爲 文本的高度,再除以UITextView的字體的行間距以獲得 數量在總的UIScrollView文本行(上關閉屏幕),包括包裝和線條斷裂的文本。
int numLines = txtview.contentSize.height/txtview.font.leading;
夫特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
}
}
}
除了
不能編譯'CompareResult'類型的值沒有成員'same'。一些私人分機? – Pahnev
:式產生被轉換爲INT(具有較低結束一個浮點值界)。也許四捨五入的結果導致更好的結果:'int numLines = round(...)'那麼0.9999的結果會導致1而不是0 – thomas
@thomas:True。我將這添加到答案中。 –