0%
使用UITextKit 实现“更多”的折叠效果
主要代码
获取最后一行Rect
1 2 3 4 5 6 7 8
| var lastRect = CGRect.zero layoutManager.enumerateEnclosingRects(forGlyphRange: NSRange(location: 0, length: textStorage.string.characters.count), withinSelectedGlyphRange: NSRange(location: NSNotFound, length: 0), in: textContainer, using: { [weak self] (rect, isStop) in guard let _self = self else { return } var newRect = rect newRect.origin.y += _self.textContainerInset.top lastRect = newRect }) print(lastRect)
|
增加 exclusionPaths
1
| textContainer.exclusionPaths = [UIBezierPath.init(rect: rect)]
|
备注
UITextView
默认携带左右边距,通过UITextView.textContainer.lineFragmentPadding
获取
UITextView
默认携带上下左右边距(UITextView.textContainerInset
),其中左右和lineFragmentPadding
相加
- 此处并没有对TruncateTextView进行过多的设置,主要是因为继承在UITextView下,GIF中的这部分设置放在了ViewController.swift中
- 此处使用的是
frame
,可以在UIView.sizeToFit()
之后获取到UIView
的Size
。约束也大抵如此
- 感谢乐逍遥提供的例子,才找到了
open func truncatedGlyphRange(inLineFragmentForGlyphAt glyphIndex: Int) -> NSRange
方法😂