Apple的Text Layout Programming Guide包含以下Objective-C代码片段,用于计算NSString中的行数。
NSString *string;
unsigned numberOfLines, index, stringLength = [string length];
for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++)
index = NSMaxRange([string lineRangeForRange:NSMakeRange(index, 0)]);
Swift等价物使用原生字符串会是什么?
答案 0 :(得分:1)
这是我找到的问题的解决方案,所以我会留在这里以防其他人觉得它有用。
var text = "Line 1\nLine 2\nLine 3"
for var range = text.startIndex...text.startIndex; range.endIndex < text.endIndex;
range = range.endIndex..<range.endIndex {
range = text.lineRangeForRange(range)
}
答案 1 :(得分:0)
这里(只是您发布的指南的简单翻译):
func countLines(textView: UITextView) -> Int {
let layoutManager = textView.layoutManager
var numberOfLines = 0
var index = 0
var lineRange = NSRange()
var numberOfGlyphs = layoutManager.numberOfGlyphs
for(numberOfLines, index; index < numberOfGlyphs; numberOfLines++){
layoutManager.lineFragmentRectForGlyphAtIndex(index, effectiveRange: &lineRange)
index = NSMaxRange(lineRange);
}
return numberOfLines
}
或者,如果您需要文本代码中的特定范围(像我一样):
func countLinesInRange(textView: UITextView, range: NSRange) -> Int{
let layoutManager = textView.layoutManager
var numberOfLines = 0
var index = range.location
var lineRange = range
var numberOfGlyphs = layoutManager.numberOfGlyphs
for(numberOfLines, index; index < range.location+range.length; numberOfLines++){
layoutManager.lineFragmentRectForGlyphAtIndex(index, effectiveRange: &lineRange)
index = NSMaxRange(lineRange);
}
return numberOfLines
}