更改字体大小而不更改UITextView attributedText

时间:2016-03-17 15:18:55

标签: objective-c uitextview nsattributedstring

我尝试在UITextView中更改字体大小,每次更改attributesText时都恢复为默认值。

有了这个,我把中间测试加粗:

str = [[NSMutableAttributedString alloc] initWithAttributedString:string];

[str addAttribute:NSFontAttributeName value:newFont range:NSMakeRange(range.location, range.length)];

之前:那是中间的粗体字。

之后:所有文字粗体

enter image description here

我希望在尺寸改变后大胆停留在他所在的地方。

编辑:

我尝试这两种方式:

1)

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:currentTextViewEdit.text];
        [attributedString addAttribute:NSFontAttributeName  value:[UIFont systemFontOfSize:textSize] range:NSMakeRange(0, currentTextViewEdit.text.length)];
        currentTextViewEdit.attributedText = attributedString;

2)

currentTextViewEdit.font = [UIFont   fontWithName:currentTextViewEdit.font.fontName size:textSize];

2 个答案:

答案 0 :(得分:2)

据@matt报道:
aUITextView.font =>更改text属性(纯文本)
因此,像您一样在attributedTexttext之间切换会导致问题。

关于你的另一个解决方案:
粗体效果在NSFontAttributeName内,它是字体值。因此,如果您使用通用字体替换它,那将删除" bold"影响。同样的斜体。

这是一种方法(根据你的工作情况,没有经过测试):
•保存attributedText(记住"效果",在您的情况下像粗体一样)
•保存光标位置(我没有测试过,所以我不知道之后光标会在哪里)
•更改字体大小,保持前一种字体(可能是正常的粗体)到属性字符串
•更新attributedText
•更换光标

您可以使用方法UITextView-(void)changeFontSize:(float)newFontSize;上使用类别,然后拨打self而不是currentTextViewEdit

NSMutableAttributedString *attributedString = [[currentTextViewEdit attributedText] mutableCopy];

//Save the cursor/selection
NSRange cursorRange = [currentTextViewEdit selectedRange];

//Apply to update the effects on new text typed by user?
[currentTextViewEdit setFont:[UIFont fontWithName:[[currentTextViewEdit font] fontName] size:newFontSize]];

//Update the font size
[attributedString enumerateAttribute:NSFontAttributeName
                             inRange:NSMakeRange(0, [attributedString length])
                             options:0
                          usingBlock:^(id  _Nullable value, NSRange range, BOOL * _Nonnull stop) {
                              UIFont *currentfont = (UIFont*)value;
                              UIFont *newFont = [UIFont fontWithName:[currentfont fontName] size:newFontSize];
                              [attributedString addAttribute:NSFontAttributeName value:newFont range:range];
                          }];
[currentTextViewEdit setAttributedText:attributedString];

//To restaure the cursor/selection
[currentTextViewEdit setSelectedRange:cursorRange];

答案 1 :(得分:1)

目前还不清楚你的问题是什么。但是,您的观察完全正确:如果您使用的是属性文本(attributedText),那么如果您更改了文本视图的纯文本功能(例如font ),它重置归属文本。这是因为你不应该这样做。您不得尝试将属性文本功能与纯文本功能结合使用。仅当您使用普通font时才使用纯文本功能(例如text)。

例如,如果您想在使用属性文本时更改字体,请更改属性文本的字体。为此,请取出attributedText,将其放入NSMutableAttributedString,进行更改,然后将其分配回attributedText