6

iPhoneプロジェクトに固定の幅と高さのUILabelがありますが、その内容はユーザーが見ているものによって異なる場合があります。UILabelに対してテキストが大きすぎる場合があります。その場合、文字列'...'が行の最後に追加されます。この文字列を別の文字列、たとえば'(more)'に変更できるかどうか疑問に思います。

ありがとう!

4

3 に答える 3

2

残念ながら、この同様の質問のように、そのようなオプションはiOSに含まれていないようです:UILabelの切り捨て文字を変更するにはどうすればよいですか?

ただし、前述の質問の答えが述べているように、これは自分で簡単に行うことができます。本当に必要なのは、文字列が切り捨てられる場所を見つけて、選択した終了文字に必要な量を差し引くことだけです。次に、残りを別の文字列に入れます。

この方法の場合、この回答も役立ちます。

Javanatorが言ったように、あなたはあなた自身の切り捨てをしなければならないでしょう。NSStringクラスへのUIKitの追加でsizeWithFont:forWidth:lineBreakMode:メッセージを使用して、特定のフォントの文字列の幅を取得する必要があります。これはすべてのタイプのフォントを処理します。

于 2012-05-01T02:36:38.720 に答える
1

これは面白い質問だと思ったので、これを作成してほとんどテストしませんでした...

- (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というプロパティを追加することを検討できます。

于 2012-05-01T02:44:25.343 に答える
1

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];
于 2015-08-05T07:53:59.410 に答える