先直接上成功的代码,从一个帖子里查到的。
//当将要编辑的时候,先执行这个代理方法,之后输入的内容也就有了行间距。
- (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];
}