iPhoneプロジェクトに固定の幅と高さのUILabelがありますが、その内容はユーザーが見ているものによって異なる場合があります。UILabelに対してテキストが大きすぎる場合があります。その場合、文字列'...'が行の最後に追加されます。この文字列を別の文字列、たとえば'(more)'に変更できるかどうか疑問に思います。
ありがとう!
iPhoneプロジェクトに固定の幅と高さのUILabelがありますが、その内容はユーザーが見ているものによって異なる場合があります。UILabelに対してテキストが大きすぎる場合があります。その場合、文字列'...'が行の最後に追加されます。この文字列を別の文字列、たとえば'(more)'に変更できるかどうか疑問に思います。
ありがとう!
残念ながら、この同様の質問のように、そのようなオプションはiOSに含まれていないようです:UILabelの切り捨て文字を変更するにはどうすればよいですか?
ただし、前述の質問の答えが述べているように、これは自分で簡単に行うことができます。本当に必要なのは、文字列が切り捨てられる場所を見つけて、選択した終了文字に必要な量を差し引くことだけです。次に、残りを別の文字列に入れます。
この方法の場合、この回答も役立ちます。
Javanatorが言ったように、あなたはあなた自身の切り捨てをしなければならないでしょう。NSStringクラスへのUIKitの追加でsizeWithFont:forWidth:lineBreakMode:メッセージを使用して、特定のフォントの文字列の幅を取得する必要があります。これはすべてのタイプのフォントを処理します。
これは面白い質問だと思ったので、これを作成してほとんどテストしませんでした...
- (void)setText:(UILabel *)label withText:(NSString *)text andTruncationSuffix:(NSString *)truncationSuffix {
// just set the text if it fits using the minimum font
//
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:label.minimumFontSize]];
if (size.width <= label.bounds.size.width) {
label.text = text;
return;
}
// build a truncated version of the text (using the custom truncation text)
// and shrink the truncated text until it fits
NSInteger lastIndex = text.length;
CGFloat width = MAXFLOAT;
NSString *subtext, *ellipticalText;
while (lastIndex > 0 && width > label.bounds.size.width) {
subtext = [text substringToIndex:lastIndex];
ellipticalText = [subtext stringByAppendingString:truncationSuffix];
width = [ellipticalText sizeWithFont:[UIFont systemFontOfSize:label.minimumFontSize]].width;
lastIndex--;
}
label.text = ellipticalText;
}
このように呼んでください:
[self setText:self.label withText:@"Now is the time for all good men to come to the aid of their country" andTruncationSuffix:@" more"];
これがうまくいく場合は、UILabelのサブクラスを追加し、これを使用してsetText:メソッドをオーバーライドし、truncatedSuffixというプロパティを追加することを検討できます。
iOSバージョン>8.0を使用している場合は、ResponsiveLabelを使用できます。ここでは、カスタマイズされた切り捨てトークンを提供したり、タップ可能にするアクションを定義したりできます。
NSString *expansionToken = @"Read More ...";
NSString *str = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithString:kExpansionToken attributes:@{NSForegroundColorAttributeName:[UIColor blueColor],NSFontAttributeName:self.customLabel.font}];
[self.customLabel setAttributedTruncationToken:attribString withAction:^(NSString *tappedString) {
NSLog(@"Tap on truncation text");
}];
[self.customLabel setText:str withTruncation:YES];