参见图片,在那条消息中"我仍然回顾那段经历......"之后,有一个计数值,即(7)。
此处,消息颜色为蓝色,计数值即(7)为绿色。
我的问题是,如何动态调整两个标签的长度和颜色不同,如图所示。
答案 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 Priority
和Content 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
。