修改NSParagraphStyle中的行间距属性会导致光标变长。

7

我有一个子类化的UITableViewCell,其中包含一个UITextView。我已经在子类化的NSTextStorage中将NSParagraphStyle作为字符串属性添加了进去。在下面的代码中,我增加了UITextView中每一行之间的间距。

Swift

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 11
myCustomTextStorage.appendAttributedString(NSAttributedString(string: someText, attributes: [NSParagraphStyleAttributeName: paragraphStyle]))

光标高度会延长到下一行的高度,如下图所示。这只会发生在最后一行之前的行。 enter image description here 我看了几篇关于此问题的stackoverflow帖子,包括这个帖子,然而,没有一个提出的解决方案对我起作用。
我已经阅读了TextKit文档,但没有找到此问题的解决方案。
是否有一种方法可以减小光标的高度?
2个回答

1
这是按设计工作的,Mac上也是一样的。它旨在为用户提供视觉反馈,显示他们所在行的行号和该行的高度。仅因为您不喜欢它的外观而改变它之前,请三思而后行。
话虽如此,您链接到的SO帖子中的方法是调整光标的通用方法(尽管调整后的矩形原点也可能需要调整)。您对它有什么问题?从那里开始会更好。

我认为它的设计并不起作用。如果光标的目的是显示行高,但你正在调整行间距,则它会错误地显示行高。如果将minimumLineHeight调整为较大的值,则可以看到光标从文本底部开始向上移动到行顶部,这是有意义的。但是,如果增加行间距,则光标不应该进入间距中的文本下方,因为那不是行的一部分。 - jeffjv
@jeffjv 请抽出时间将此论点提交给苹果作为错误报告。我并不是设计者。 - Joshua Nozzi

0

这个问题的答案已经在这个帖子中给出。这里只是为了以后参考而粘贴。 iOS - UITextView lineSpacing make cursor height not same

“你可以通过子类化UITextView来改变光标高度,然后重写caretRectForPosition:position函数。例如:

  • (CGRect)caretRectForPosition:(UITextPosition *)position { CGRect originalRect = [super caretRectForPosition:position]; originalRect.size.height = 18.0; return originalRect; } "

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接