设置attributionText后阻止自动UILabel字体更改

时间:2015-04-22 06:24:23

标签: iphone xcode swift ios8

我已经发现如果我将属性文本设置为UILabel,预定义字体将更改为属性文本的第一个字符的字体。例如:

// the font size is set to 20 in Interface Builder
println(theLabel.font.pointSize);
var styledText = NSMutableAttributedString(string: "$100");
var smallFont = UIFont(name: theLabel.font.fontName, size: theLabel.font.pointSize / 2)!;
styledText.addAttribute(NSFontAttributeName, value: smallFont, range: NSMakeRange(0, 1));
theLabel.attributedText = styledText;
println(theLabel.font.pointSize);
// output:
// 20
// 10

我不知道是否可以将其称为错误,但在某些情况下会导致问题。

有人可以建议一个干净的解决方案来获取在Interface Builder中设置的默认字体吗?

将字体重置为预定义字体的一种解决方案是设置text的{​​{1}}属性,因为这会导致UILabel切换到纯文本模式(不再有属性文本) )。

UILabel

2 个答案:

答案 0 :(得分:1)

假设let myLabel: UILabel的字体大小为20. myLabel 应显示属性文本:“foo bar”,其中“bar”的字体大小为30。

如果您更改 myLabel 上的字体,打算将“foo”的字体大小更改为不是20,而是更改为15,您会注意到这会导致{{ 1}}搞砸了。

受@ Majid的调查结果启发,如果在应用字体更改之前设置attributedText属性。 text保持不变,,现在使用新的“默认”字体进行更新!

attributedText

答案 1 :(得分:-1)

NSMakeRange 

负责选择哪些字符

addAttribute

有影响。当你设置

NSMakeRange(0,1)

它告诉每个字符从第0个字符到第1个字符被归因。这意味着只能归因于第一个角色。尝试将其设置为

NSMakeRange(0,i)   //or     NSMakeRange(0,1000)    

我设置了alt。 1000的选项,因为它是一个任意大的数字,只是在以下情况下提供有保证的字体更改" i"不起作用

P.S。 //符号是指先前开发人员写下的有用提示或评论。