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]; 
}
iOS 输入内容时UITextView的行间距等属性设置_第1张图片
输入中文会出现字母

你可能感兴趣的:(iOS 输入内容时UITextView的行间距等属性设置)