美文网首页iOS Developer
iOS 输入内容时UITextView的行间距等属性设置

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

作者: 訷訷 | 来源:发表于2017-06-20 10:01 被阅读78次

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

    //当将要编辑的时候,先执行这个代理方法,之后输入的内容也就有了行间距。
    - (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的行间距等属性设置

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