1

我有一个 UITextView 的子类,用于在文本流中显示自定义视图。它为自定义视图添加了exclusionPath,并使用自动布局在该区域内呈现它的内容。该部分正在工作,并且文本也环绕在图像周围。挑战在于我想要自定义行距,以便第二行文本始终位于图像下方。我玩过 layoutManager:lineSpacingAfterGlyphAtIndex:withProposedLineFragmentRect: 并且可以使用基于 contentSize 和 lineHeight 的行计算来调整字符的行距。

我可以确定一个字符是否在第一行并正确调整它的 lineSpacing。问题是当一个字符换行时,第一个字符不会导致重新检查第一行的字符。如果我输入第二个包装字符,那么一切都很好;第一行将添加行距。这会导致布局在输入第二个换行字符时跳转。

换句话说,我正在尝试做的事情:
- 将自定义 UIView 放在 UITextView 内
- 为单行文本设置标准行高。
- 如果需要超过 1 行文本,则调整第 1 行的 lineSpacing 以将第 2 行换行到图像下方。

对不起,如果我的图表很粗糙,但这是我所看到的:

--------------  First line of text view content  
| CustomView |  second line of text view content  
--------------  third line of text view content
fourth line of text view content  

这是我想要的:

--------------  First line of text view content  
| CustomView |  
-------------- 
second line of text view content
third line of text view content  
fourth line of text view content

我错过了什么吗?contentSize.height 是不是在角色渲染之后才更新?有没有更好的方法来获取框的高度,或者确定文本框是否呈现多行?

更新:我可以确定行数(基于 contentSize)为 1(应为 2)但字形的 rect.origin.y 大于 0 的情况,然后调用 invalidateIntrinsicContentSize。这确实允许渲染根据需要显示,但确实会导致额外的调用无效并且看起来很重。

4

0 回答 0