考虑一个长串,例如“位于美丽的巴尔的摩市中心”。
我的标签对于此文字来说太小了,目前显示如下:
我希望位置子字符串被中心截断而不截断“位于”子字符串,如下所示:
位于美丽的... ltimore City
UILabel class reference表明这应该是可能的:
如果要将换行模式仅应用于文本的一部分,请使用所需的样式信息创建新的属性字符串,并将其与标签关联。如果未使用样式化文本,则此属性将应用于text属性中的整个文本字符串。
在一个示例项目中,只有一个UILabel,我尝试使用以下代码来遵循这些说明:
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *firstPart = @"Located in";
NSString *secondPart = @"beautiful downtown Baltimore City";
NSString *joined = [NSString stringWithFormat:@"%@ %@", firstPart, secondPart];
NSMutableAttributedString *joinedAttributed = [[NSMutableAttributedString alloc] initWithString:joined];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineBreakMode = NSLineBreakByTruncatingMiddle;
NSRange detailRange = [joined rangeOfString:secondPart];
[joinedAttributed addAttribute:NSParagraphStyleAttributeName value:style range:detailRange];
self.label.attributedText = joinedAttributed;
}
我的标签仍然显示相同,最后截断。
以下是调试器中的最终结果:
(lldb) po joinedAttributed
Located in {
}beautiful downtown Baltimore City{
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 5, Tabs (\n 28L,\n 56L,\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n), DefaultTabInterval 0, Blocks (null), Lists (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0";
}
有没有人让这个工作?我的实施中缺少什么?
答案 0 :(得分:0)
为什么不使用两个UILabel
?第一个包含文本“位于”,然后第二个包含您想要的任何其他文本。然后,您只能将NSLineBreakByTruncatingMiddle
属性应用于第二个标签。
你只需将它们彼此相邻放置就可以产生同样UILabel
的错觉。
希望这有帮助!