如何截断UILabel中字符串中的字符串?

Aar*_*ron 4 iphone views objective-c uikit ios

说我有The Dark Knight Rises at 7:45pm,我需要将其放入固定宽度的UILabel(适用于iPhone).我怎么能把那个截形变成"黑暗骑士Ris ......在晚上7:45",而不是"黑暗骑士在7:4升起......"?

Ram*_*uri 11

UILabel有这个属性:

@property(nonatomic) NSLineBreakMode lineBreakMode;
Run Code Online (Sandbox Code Playgroud)

您可以通过将其设置为NSLineBreakByTruncatingMiddle来启用该行为.

编辑

我不明白你想要截断字符串的一部分.然后读这个:

如果要将换行模式仅应用于文本的一部分,请使用所需的样式信息创建新的属性字符串,并将其与标签相关联.如果未使用样式化文本,则此属性将应用于text属性中的整个文本字符串.

所以甚至还有一个用于设置段落样式的类:NSParagraphStyle,它也有可变版本.
因此,假设您有一个要应用该属性的范围:

NSRange range=NSMakeRange(i,j);
Run Code Online (Sandbox Code Playgroud)

你必须创建一个NSMutableParagraphStyle对象,并将它的lineBreakMode设置为NSLineBreakByTruncatingMiddle.Notice,你也可以设置很多其他参数.所以我们这样做:

NSMutableParagraphStyle* style= [NSMutableParagraphStyle new];
style.lineBreakMode= NSLineBreakByTruncatingMiddle;
Run Code Online (Sandbox Code Playgroud)

然后为该范围内标签的attributedText添加该属性.intributeText属性是NSAttributedString,而不是NSMutableAttributedString,因此您必须创建NSMutableAttributedString并将其分配给该属性:

NSMutableAttributedString* str=[[NSMutableAttributedString alloc]initWithString: self.label.text];
[str addAttribute: NSParagraphStyleAttributeName value: style range: range];
self.label.attributedText= str;
Run Code Online (Sandbox Code Playgroud)

请注意,NSAttributedString还有很多其他属性,请在此处查看.