如何动态显示不同颜色的2个标签?

时间:2017-11-17 11:02:48

标签: ios objective-c uilabel

enter image description here

参见图片,在那条消息中"我仍然回顾那段经历......"之后,有一个计数值,即(7)。

此处,消息颜色为蓝色,计数值即(7)为绿色。

我的问题是,如何动态调整两个标签的长度和颜色不同,如图所示。

2 个答案:

答案 0 :(得分:0)

使用两个标签进行操作并不是您想要的方式。更好的解决方案是使用NSAttributedString

struct MyMsg {
        var text: String
        var count: Int
    }

    let msg = MyMsg(text: "I still look back on that expe....", count: 7)

    let contentString = NSMutableAttributedString(string: msg.text)
    let countString = NSAttributedString(string: " \(msg.count)", attributes: [NSForegroundColorAttributeName: UIColor.green])
    contentString.append(countString)
    myLabel.attributedText = contentString

答案 1 :(得分:0)

您可以在此示例中使用NSAttributedString

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"I still look back on that expe.... (7)"];
[string setColorForText:@"I still look back on that expe...." withColor:[UIColor blueColor]];
[string setColorForText:@"(7)" withColor:[UIColor greenColor]];
mylabel.attributedText = string;

或者您可以在故事板中使用约束。 这很简单,您必须使用Content Hugging PriorityContent Compression Resistance Priority值来减少要附加到其他标签的第一个标签。

如果您愿意,我可以详细解释如何操作。

修改

您可以尝试以下代码:

NSString *firstPart = @"I still look back on that expe....";
NSString *secondPart = @"(7)";

NSAttributedString *firstAttrStr  = [[NSAttributedString alloc] initWithString:firstPart attributes:@{ NSForegroundColorAttributeName : [UIColor blueColor] }];
NSAttributedString *secondAttrStr = [[NSAttributedString alloc] initWithString:secondPart attributes:@{ NSForegroundColorAttributeName : [UIColor greenColor] }];

NSMutableAttributedString* result = [firstAttrStr mutableCopy];
[result appendAttributedString:secondAttrStr];

self.label.attributedText = result;

要添加图片,您可以使用NSTextAttachment