5

複数行UILabelnumberOfLines= 0)があります。幅は実行時に変更される可能性があり、これにより切り捨てや再ラップが発生する場合があります。いくつかの例がこれを最もよく示しています。

例1:幅を狭くすると、改行ポイントが異なります

ここに画像の説明を入力してください ここに画像の説明を入力してください

例2:幅を狭くすると切り捨てが発生します

ここに画像の説明を入力してください ここに画像の説明を入力してください

例3:幅を狭くすると、切り捨てと異なる改行位置の両方が発生します

ここに画像の説明を入力してください ここに画像の説明を入力してください

例4:幅の縮小は、切り捨てまたは改行位置に影響を与えません

ここに画像の説明を入力してください ここに画像の説明を入力してください

このフォーマットの変更は非常に不快なものになる可能性があるため、アニメーションの背後でマスクするつもりです(おそらくフェードイン/フェードアウト)。ただし、最初のハードルは、これをいつ行う必要があるかを特定することです。ラベルのサイズが変更されるたびにアニメーションを適用したくありません。切り捨てまたは改行の位置が変更される場合のみです。

これをどのようにテストできますか?テストでは、たとえば1、2、および3の場合はYESが返されますが、たとえば4の場合はNOが返されます。

注:私の例では、サイズ変更によって行数が変わることはありません。

注2:テキストの書式設定に関連するより良いタグを誰かが持っているなら、私はそれらを知りたいです-自由に編集してください。

注3:この動作が達成されるのを確認したい場合は、iPhoneでAppleのmail.appを試してください。受信トレイを表示しているときは、電子メールをスワイプして、要約行が再折り返しまたは切り捨てられるときにフェードイン/フェードアウトするのを確認します(ただし、必要がない場合はそうではありません)。

4

5 に答える 5

2

NSString特定のインスタンスを表示するために必要なラベルのサイズを知ることができます。たとえば、次のように使用できます。

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode

指定された制約でレンダリングされた場合、文字列のサイズを返します。

したがってCGSize、特定の文字列を取得して、UILabelサイズよりも大きくないかどうかを確認する必要があります。

    UILabel *label;
    CGSize sizeNeeded = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, MAXFLOAT)];
    if (sizeNeeded.height > label.bounds.size.height)
    {
        NSLog(@"String is truncated");
    }

NSStringここで見つけることができるより便利なメソッド: NSString UIKit Additions Reference

わかりました、あなたが望むことをする別の方法:

1)UILabel同じプロパティで 2 つ作成しますが、2 つ目 ( label2) は別のものになりwidthます。

2)alphaのプロパティをlabel20.0編集モードに設定します。

3) 編集モードが開始されたら、次のようなアニメーションを作成します。

// label1.alpha == 1.0, label2.alpha == 0.0 
{[UIView animateWithDuration:0.5 animations:^{
    label1.alpha = 0.0;
    label2.alpha = 1.0;
}];

4) 編集モード終了時:

{[UIView animateWithDuration:0.5 animations:^{
    label1.alpha = 1.0;
    label2.alpha = 0.0;
}];

これにより、Mail.app と同じ結果が得られます。

于 2012-10-18T02:05:11.110 に答える
0

iOS 7 以降のバージョンでは、次の解決策を確認できます。

  1. https://stackoverflow.com/a/30813691/2123122
  2. https://stackoverflow.com/a/32094824/2123122
于 2015-08-19T12:00:59.730 に答える