我尝试在UITextView中更改字体大小,每次更改attributesText时都恢复为默认值。
有了这个,我把中间测试加粗:
str = [[NSMutableAttributedString alloc] initWithAttributedString:string];
[str addAttribute:NSFontAttributeName value:newFont range:NSMakeRange(range.location, range.length)];
之前:那是中间的粗体字。
之后:所有文字粗体
我希望在尺寸改变后大胆停留在他所在的地方。
编辑:
我尝试这两种方式:
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];
答案 0 :(得分:2)
据@matt报道:
aUITextView.font
=>更改text
属性(纯文本)
因此,像您一样在attributedText
和text
之间切换会导致问题。
关于你的另一个解决方案:
粗体效果在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
。