美文网首页
iOS开发 - 给UITextView添加行间距计算准确的高度并

iOS开发 - 给UITextView添加行间距计算准确的高度并

作者: 俺不是大佬儿 | 来源:发表于2019-12-07 10:59 被阅读0次

UITextView添加行间距计算准确的内容高度并解决光标扩大问题

直接使用 textView.font.lineHeight获取到的行高叠加后会出现偏差

CGFloat lineH = textView.font.lineHeight

设置textView的行间距,实现行间距可控再计算行高更准确

///textView添加行间距
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 3.f;
NSDictionary *attributes = @{
                              NSFontAttributeName:[UIFont systemFontOfSize:17],
                              NSParagraphStyleAttributeName:paragraphStyle
                            };
textView.typingAttributes = attributes;

重新计算行高

CGFloat lineH = textView.font.lineHeight + kText_LineSpacing;
添加行间距后输入,会出现光标扩大问题

直接在自定义的UITextView中重写- (CGRect)caretRectForPosition:(UITextPosition *)position 方法

//原理
//UITextView遵循了UITextInput协议,其中有返回光标frame的方法
//- (CGRect)caretRectForPosition:(UITextPosition *)position
//可以使用自定义的TextView,重写返回光标frame的方法避免光标扩大问题
- (CGRect)caretRectForPosition:(UITextPosition *)position {
    CGRect originalRect = [super caretRectForPosition:position];
    originalRect.size.height = self.font.lineHeight + 2.f;
    originalRect.size.width = 2.f;
    return originalRect;
}

最终效果

行间距效果

相关文章

网友评论

      本文标题:iOS开发 - 给UITextView添加行间距计算准确的高度并

      本文链接:https://www.haomeiwen.com/subject/fltugctx.html