如果只有多行文本呈现时,如何更改UITextView中第一行文本的行间距?

时间:2016-05-31 23:33:15

标签: ios objective-c uitextview contentsize

我有一个UITextView的子类,用于在文本流中显示自定义视图。它为自定义视图添加了一个exclusionPath,并使用autolayout在该区域内呈现它的内容。那部分是有效的,文本也包围了图像。挑战在于我想要自定义行间距,使得第二行文本始终位于图像下方。我使用layoutManager:lineSpacingAfterGlyphAtIndex:withProposedLineFragmentRect:并且可以使用基于contentSize和lineHeight的行计算来调整字符的行间距。

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

换句话说,我正在尝试做什么:
- 将自定义UIView放在UITextView中 - 对于单行文本具有标准行高 - 如果需要多行文本,则调整第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。这确实允许渲染显示为需要,但确实导致额外的调用无效并且看起来很重。

0 个答案:

没有答案