SwiftUIの基本を身につけたい方はこちら

【Xcode/Swift】UITextViewの行数を取得する方法

以下のExtensionを使えば、TextViewの行数を取得できます。

Extension

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
extension UITextView {
var numberOfLines: Int {
var computingLineIndex = 0
var computingGlyphIndex = 0
while computingGlyphIndex < layoutManager.numberOfGlyphs {
var lineRange = NSRange()
layoutManager.lineFragmentRect(forGlyphAt: computingGlyphIndex, effectiveRange: &lineRange)
computingGlyphIndex = NSMaxRange(lineRange)
computingLineIndex += 1
}
if textContainer.maximumNumberOfLines > 0 {
return min(textContainer.maximumNumberOfLines, computingLineIndex)
} else {
return computingLineIndex
}
}
}
extension UITextView { var numberOfLines: Int { var computingLineIndex = 0 var computingGlyphIndex = 0 while computingGlyphIndex < layoutManager.numberOfGlyphs { var lineRange = NSRange() layoutManager.lineFragmentRect(forGlyphAt: computingGlyphIndex, effectiveRange: &lineRange) computingGlyphIndex = NSMaxRange(lineRange) computingLineIndex += 1 } if textContainer.maximumNumberOfLines > 0 { return min(textContainer.maximumNumberOfLines, computingLineIndex) } else { return computingLineIndex } } }
extension UITextView {
    var numberOfLines: Int {
        var computingLineIndex = 0
        var computingGlyphIndex = 0
        while computingGlyphIndex < layoutManager.numberOfGlyphs {
            var lineRange = NSRange()
            layoutManager.lineFragmentRect(forGlyphAt: computingGlyphIndex, effectiveRange: &lineRange)
            computingGlyphIndex = NSMaxRange(lineRange)
            computingLineIndex += 1
        }
        if textContainer.maximumNumberOfLines > 0 {
            return min(textContainer.maximumNumberOfLines, computingLineIndex)
        } else {
            return computingLineIndex
        }
    }
}

評価