iOS 输入内容时UITextView的行间距等属性设置

先直接上成功的代码,从一个帖子里查到的。

//当将要编辑的时候,先执行这个代理方法,之后输入的内容也就有了行间距。
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {    
    // 当没有字符时要先临时填充一个字符,再设置属性才能有效
    if (textView.text.length < 1) {
        textView.text = @"间距"; 
    }
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = 5; // 字体的行间距
    NSDictionary *attributes = @{
                                 NSFontAttributeName:[UIFont systemFontOfSize:14],
                                 NSParagraphStyleAttributeName:paragraphStyle,
                                 NSKernAttributeName:@1.2f,
                                 };
    textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes];
    // 删除临时字符
    if ([textView.text isEqualToString:@"间距"]) { 
        textView.attributedText = [[NSAttributedString alloc] initWithString:@"" attributes:attributes];//主要是把“间距”两个字给去了。
    }
    return YES;
}

注意:无字符时要先添加临时字符,再设置属性,否则无效。比较奇怪的地方。

推理发现:
根据上面的方法,我发现原来只要在创建的时候也在有临时字符的情况下赋值属性,然后删掉临时字符,也能有相同的效果。

UITextView *textView = [[UITextView alloc] init];
[self.view addSubview:textView];
// textview 改变字体的行间距
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 5;// 字体的行间距
NSDictionary *attributes = @{
                             NSFontAttributeName:[UIFont systemFontOfSize:15],
                             NSParagraphStyleAttributeName:paragraphStyle,
                             NSKernAttributeName:@1.2f,
                             };
// 在有临时字符的情况下赋值属性,不可省略,否则无效
textView.attributedText = [[NSAttributedString alloc] initWithString:@"间隔" attributes:attributes]; 
// 删除临时字符
textView.attributedText = [[NSAttributedString alloc] initWithString:@"" attributes:attributes]; 

错误例子:
可能会有人直觉地想到在textViewDidChange里修改,虽有效果但bug严重。
bug : 输入中文会出现字母。每次删除字符后光标都会回到最后。

- (void)textViewDidChange:(UITextView *)textView {
    // textview 改变字体的行间距
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = 5;// 字体的行间距
    NSDictionary *attributes = @{
                                 NSFontAttributeName:[UIFont systemFontOfSize:15],
                                 NSParagraphStyleAttributeName:paragraphStyle,
                                 NSKernAttributeName:@1.2f,
                                 };
    textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes]; 
}
输入中文会出现字母
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容