NSForegroundColorAttributeName 不适用于 UILabel
NSForegroundColorAttributeName not working for UILabel
我在使用 "NSForegroundColorAttributeName" 更改子字符串颜色时遇到问题。我很困惑,因为正在应用同一子字符串的其他属性(下划线)。
还尝试使用已弃用的属性 "UITextAttributeTextColor" 和其他建议的属性 "kCTForegroundColorAttributeName" 并获得了相同的效果。
我正在为 iOS 7.
编译
NSString *freeText = [NSString stringWithFormat:@"(%@)", self.me.activity.text];
int lblMaxWidth = arrImgView.origin.x - WPRConstraints.BorderOffset;
int lblMaxHeight = self.activityView.size.height - WPRConstraints.BorderOffset * 2;
RevUILabel *addActivityLbl = [[RevUILabel alloc] initWithFontNameMultiLine:[WPRFonts LattoBold]
size:16
sizeConstrain:CGSizeMake(lblMaxWidth,lblMaxHeight)];
addActivityLbl.text = [NSString stringWithFormat:@"%@ %@", Translate(self.me.activity.activityKey), freeText] ;
addActivityLbl.textColor = BlackColor;
NSMutableAttributedString *str = [addActivityLbl.attributedText mutableCopy];
[str addAttribute:NSUnderlineColorAttributeName value:[UIColor redColor] range:[addActivityLbl.text rangeOfString:freeText]];
[str addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:1] range:[addActivityLbl.text rangeOfString:freeText]];
[str addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:[addActivityLbl.text rangeOfString:freeText]];
addActivityLbl.attributedText = str;
addActivityLbl.frame = CGRectMake(WPRConstraints.BorderOffset,
WPRConstraints.BorderOffset,
addActivityLbl.size.width,
addActivityLbl.size.height);
[self.activityView addSubview:addActivityLbl];
问题出在这一行:
NSMutableAttributedString *str = [addActivityLbl.attributedText mutableCopy];
我不知道你代码的前几行,但 addActivityLbl.attributedText
可能是空的。
其次,NSAttributedString
与 UILabel
一起使用不如与 UITextView
一起使用可靠。如果未明确提供属性,UILabel
的 attributedText
会继承 UILabel
的 text
的属性。
你的 addActivityLbl.textColor
是黑色的。而你还没有设置你的addActivityLbl.attributedText ForegroundColorAttribute
。这意味着您的 addActivityLbl.attributedText
将从您的 addActivityLbl.textColor
.
继承 BlackColor
此行将无法按预期工作;因为你还没有设置你的addActivityLbl.attributedText
。 freeText
还没有范围。
[str addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:[addActivityLbl.text rangeOfString:freeText]];
底层之所以有效,是因为底层不是 addActivityLbl.text
的 属性(未被 attributedText 继承)。
我建议你改用UITextView
(这样更安全)。另一种选择是在引用它的某个范围之前设置你的label.attributedText
。
确保您没有在 UILabel
的 textColor
属性 上设置颜色 [=12] =].
我在尝试设置 UIButton 属性标题的颜色时遇到了类似的问题。我正在应用其他属性,如下划线,它们起作用了,但 NSForegroundColorAttributeName 属性完全没有效果。
在拔头发并质疑自己的理智之后,我最终发现我的问题是在情节提要中,我的按钮被设置为 System
按钮:
而且必须是 Custom
:
在故事板中更改该设置后,我能够设置 NSForegroundColorAttributeName 具有预期的正常行为。
我希望这对某人有所帮助!
我在使用 "NSForegroundColorAttributeName" 更改子字符串颜色时遇到问题。我很困惑,因为正在应用同一子字符串的其他属性(下划线)。
还尝试使用已弃用的属性 "UITextAttributeTextColor" 和其他建议的属性 "kCTForegroundColorAttributeName" 并获得了相同的效果。
我正在为 iOS 7.
编译 NSString *freeText = [NSString stringWithFormat:@"(%@)", self.me.activity.text];
int lblMaxWidth = arrImgView.origin.x - WPRConstraints.BorderOffset;
int lblMaxHeight = self.activityView.size.height - WPRConstraints.BorderOffset * 2;
RevUILabel *addActivityLbl = [[RevUILabel alloc] initWithFontNameMultiLine:[WPRFonts LattoBold]
size:16
sizeConstrain:CGSizeMake(lblMaxWidth,lblMaxHeight)];
addActivityLbl.text = [NSString stringWithFormat:@"%@ %@", Translate(self.me.activity.activityKey), freeText] ;
addActivityLbl.textColor = BlackColor;
NSMutableAttributedString *str = [addActivityLbl.attributedText mutableCopy];
[str addAttribute:NSUnderlineColorAttributeName value:[UIColor redColor] range:[addActivityLbl.text rangeOfString:freeText]];
[str addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:1] range:[addActivityLbl.text rangeOfString:freeText]];
[str addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:[addActivityLbl.text rangeOfString:freeText]];
addActivityLbl.attributedText = str;
addActivityLbl.frame = CGRectMake(WPRConstraints.BorderOffset,
WPRConstraints.BorderOffset,
addActivityLbl.size.width,
addActivityLbl.size.height);
[self.activityView addSubview:addActivityLbl];
问题出在这一行:
NSMutableAttributedString *str = [addActivityLbl.attributedText mutableCopy];
我不知道你代码的前几行,但 addActivityLbl.attributedText
可能是空的。
其次,NSAttributedString
与 UILabel
一起使用不如与 UITextView
一起使用可靠。如果未明确提供属性,UILabel
的 attributedText
会继承 UILabel
的 text
的属性。
你的 addActivityLbl.textColor
是黑色的。而你还没有设置你的addActivityLbl.attributedText ForegroundColorAttribute
。这意味着您的 addActivityLbl.attributedText
将从您的 addActivityLbl.textColor
.
此行将无法按预期工作;因为你还没有设置你的addActivityLbl.attributedText
。 freeText
还没有范围。
[str addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:[addActivityLbl.text rangeOfString:freeText]];
底层之所以有效,是因为底层不是 addActivityLbl.text
的 属性(未被 attributedText 继承)。
我建议你改用UITextView
(这样更安全)。另一种选择是在引用它的某个范围之前设置你的label.attributedText
。
确保您没有在 UILabel
的 textColor
属性 上设置颜色 [=12] =].
我在尝试设置 UIButton 属性标题的颜色时遇到了类似的问题。我正在应用其他属性,如下划线,它们起作用了,但 NSForegroundColorAttributeName 属性完全没有效果。
在拔头发并质疑自己的理智之后,我最终发现我的问题是在情节提要中,我的按钮被设置为 System
按钮:
而且必须是 Custom
:
在故事板中更改该设置后,我能够设置 NSForegroundColorAttributeName 具有预期的正常行为。
我希望这对某人有所帮助!