swift 如何使用TextKit 2获取UITextView行数?

y4ekin9u  于 2023-03-22  发布在  Swift
关注(0)|答案(1)|浏览(204)

从iOS 16开始,TextKit 2已经取代了UITextView的TextKit 1,这意味着layoutManager被淘汰,textLayoutManager被淘汰。但是,旧的一些属性不在新的属性中。我如何使用TextKit 2计算UITextView中的行数?下面是TextKit 1的实现。

extension UITextView {
    var numberOfLines: Int {
        if #available(iOS 16.0, *) {
            // TextKit 2

            let layout = textLayoutManager // new layout manager
        } else {
            // TextKit 1

            let layout = layoutManager // old layout manager
            var lines = 0
            var index = 0
            var lineRange = NSRange()
            
            while index < layout.numberOfGlyphs {
                layout.lineFragmentRect(forGlyphAt: index, effectiveRange: &lineRange)
                index = NSMaxRange(lineRange)
                lines += 1
            }
            return max(1, lines)
        }
    }
}
wnvonmuf

wnvonmuf1#

您可以使用enumerateTextLayoutFragments来获得“真实的”行数,除以“\n”。

var count = 0
textView.textLayoutManager?.enumerateTextLayoutFragments(from: textView.textLayoutManager?.documentRange.location,
                                                         options: [.ensuresLayout, .ensuresExtraLineFragment],
                                                         using: { _ in
    count += 1
    return true // keep going
})

相关问题