我遇到了这个很好的例子,它让我了解如何在iOS7的UITextView中输入行间距/段间距,但是有一个问题,我希望有人可以帮我解决问题,因为我我还在学习TextKit。
这是一个实际的例子 https://github.com/downie/DoubleSpacedTextView
我附上了2个文件: -
1-这是一个问题的视频: - http://1drv.ms/1o8Rpd2
2-这是我正在测试的项目: http://1drv.ms/1o8RtK0
问题是当文本行之间有空白行(至少有2个空行),然后在空白行内单击以激活UITextView并显示键盘时,文本向上移动/丢失其格式。
这是我从原版中略微修改的核心功能,它进行了格式化,它工作得很好,但是当你第一次点击UITextView时没有: -
- (void) formatText
{
__block CGFloat topOffset = 0;
NSRange lineGlyphRange = [self.layoutManager glyphRangeForTextContainer:self.textContainer];
[self.layoutManager
enumerateLineFragmentsForGlyphRange:lineGlyphRange usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *textContainer, NSRange glyphRange, BOOL *stop)
{
CGRect adjustedRect = rect;
CGRect adjustedUsedRect = usedRect;
adjustedRect.origin.y = topOffset;
adjustedUsedRect.origin.y = topOffset;
[self.layoutManager setLineFragmentRect:adjustedRect forGlyphRange:glyphRange usedRect:adjustedUsedRect];
topOffset += 30; // 30 is the space between the lines you can adjust this as you like
}];
CGRect adjustedExtraLineFragmentRect = self.layoutManager.extraLineFragmentRect;
CGRect adjustedExtraLineFragmentUsedRect = self.layoutManager.extraLineFragmentUsedRect;
adjustedExtraLineFragmentRect.origin.y = topOffset;
adjustedExtraLineFragmentUsedRect.origin.y = topOffset;
[self.layoutManager setExtraLineFragmentRect:adjustedExtraLineFragmentRect usedRect:adjustedExtraLineFragmentUsedRect textContainer:self.textContainer];
}
请问,我们是否可以阻止这种情况发生?这样当我们在UITextView中输入时,文本总是被格式化。
是否还有其他示例显示我们如何使用TextKit或属性Text将格式化文本(带行间距)键入UITextView。
自iOS6以来,我一直在努力解决这个问题。
谢谢,
威尔
答案 0 :(得分:1)
我没有完整的解决方案,只是想知道在哪里寻找解决方案。
所有布局代码都会触发UITextView的textChange事件。移动光标不会更改该文本的任何内容,因此不会调用任何代码。但是,即使将其附加到textViewDidChangeSelection也不会使问题消失。
我认为这可能是两件事之一: