首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UITextView lineSpacing导致段落行间光标高度不同

UITextView lineSpacing导致段落行间光标高度不同
EN

Stack Overflow用户
提问于 2013-11-26 11:28:04
回答 1查看 8.4K关注 0票数 28

我在UITextview中使用NSMutableParagraphStyle在每行文本之间添加行空间。

当我在textview中输入内容时,光标高度正常。但是当我将光标移动到第二行(而不是最后一行)上的文本时,光标高度变大了。

我应该怎么做才能使光标高度在文本的每一行中正常?这是我目前使用的代码:

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 30.;
textView.font = [UIFont fontWithName:@"Helvetica" size:16];
textView.attributedText = [[NSAttributedString alloc] initWithString:@"My Text" attributes:@{NSParagraphStyleAttributeName : paragraphStyle}];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-01 19:30:13

最后,我找到了一个解决问题的方法。

可以通过将UITextView子类化,然后覆盖caretRectForPosition:position函数来更改光标高度。例如:

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

文档链接:https://developer.apple.com/documentation/uikit/uitextinput/1614518-caretrectforposition

更新: Swift 2.x或Swift 3.x

参见Nate's answer

更新: Swift 4.x或Swift 5.x

对于Swift 4.x,请使用caretRect(for position: UITextPosition) -> CGRect

import UIKit

class MyTextView: UITextView {

    override func caretRect(for position: UITextPosition) -> CGRect {
        var superRect = super.caretRect(for: position)
        guard let font = self.font else { return superRect }

        // "descender" is expressed as a negative value, 
        // so to add its height you must subtract its value
        superRect.size.height = font.pointSize - font.descender 
        return superRect
    }
}

文档链接:https://developer.apple.com/documentation/uikit/uitextinput/1614518-caretrect

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20207961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档