我在使用“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可能为空。

其次,将NSAttributedStringUILabel结合使用不如将其与UITextView结合使用。如果未明确提供属性,则attributedTextUILabel确实会从textUILabel继承属性。

您的addActivityLbl.textColor是黑色的。而且您仍然没有设置addActivityLbl.attributedText ForegroundColorAttribute。这意味着您的addActivityLbl.attributedText将继承自addActivityLbl.textColor的BlackColor。

这条线将无法正常工作。因为您还没有设置addActivityLbl.attributedTextfreeText尚无范围。
[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[addActivityLbl.text rangeOfString:freeText]];
底层的工作原理是因为底层不是addActivityLbl.text的属性(不是attributedText继承的)。

我建议您改用UITextView(这样更安全)。另一种选择是设置label.attributedText,然后再引用它的某个范围。

关于ios - NSForegroundColorAttributeName不适用于UILabel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28524513/

10-12 03:30