11

iOS 5 で。

最初にペン先に配置された UILabel 要素があります。x の配置を固定したままにしたい。1行でも2行でもいいです。3 行以上の場合は、改行設定を使用して省略記号を表示する必要があります。

私はnumberOfLinesプロパティを使用し、-sizeToFit

UILabel のnumberOfLinesプロパティを 0 に設定すると、テキストによっては十分なスペースがなく、呼び出し後に 2 行目に折り返されることが正しく認識されますが-sizeToFit、まれに、行が 3 行に伸びるほど長い場合があります。 3 行が表示されますが、これは望ましくありません。プロパティを 2に設定numberOfLinesすると、実際には全体が 1 行に引き伸ばされ、ペン先に設定された最初のフレームがより広くなるように引き伸ばされます。

 CGRect titleFrame = [[self titleLabel] frame];
 [[self titleLabel] setNumberOfLines:0];
 [[self titleLabel] setText:newProductTitleText];
 [[self titleLabel] sizeToFit];
 CGRect newTitleFrame = [[self titleLabel] frame];

CGRect は、事後に計算できるようにするためだけに存在します。したがってnumberOfLines、0 に設定すると機能し、フレーム内の元の origin.x は変更されず、長いテキストは複数の行に分割されますが、2 行に制限されることはありません。プロパティを 2 に設定numberOfLinesします。これは、Apple ドキュメントを読むときに

このプロパティは、ラベルのテキストを境界の四角形に合わせるために使用する最大行数を制御します。このプロパティのデフォルト値は 1 です。上限をなくして必要な数の行を使用するには、このプロパティの値を 0 に設定します。

これを 2 に設定しても機能するはずです。sizeToFitすべてのテキストに合わせて拡大する場合は正の X 方向と Y 方向に拡大することを期待しますがnumberOfLines、0 以外に設定すると負の X 方向に拡大します。

ETA: 「オートサイズ」ストラットは、最小 x,y で固定するために上部と左側に設定されます。

洞察をありがとう。

4

2 に答える 2

0

-[UILabel sizeToFit]2に設定したときに設定した最大幅を尊重していない同様の問題がありましnumberOfLinesた。その問題を解決した方法は次のとおりです。

    CGFloat titleMaxWidth = 200;
    CGFloat titleMinHeight = 30;
    CGFloat titleMaxHeight = 40;
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, titleMaxWidth, titleMaxHeight)]; // alternatively, you could do this in a nib
    titleLabel.numberOfLines = 0;
    titleLabel.text = @"The title label will be sized appropriately with this technique.";
    titleLabel.font = [UIFont boldSystemFontOfSize:16];
    [titleLabel sizeToFit];
    titleLabel.numberOfLines = 2;
    if (titleLabel.height > titleMaxHeight)
    {
        titleLabel.height = titleMaxHeight;
    }
    else if (titleLabel.height < titleMinHeight)
    {
        titleLabel.height = titleMinHeight;
    }

ご覧のとおり-sizeToFit、ラベルを非常に小さくすることが多いため、ラベルの最小の高さも必要でしたが、最小の高さを気にしない場合は、そのコードを無視できます。titleMaxHeight の「マジック ナンバー」である 40 は、このフォントを使用した 2 行のラベルには実際には 40px しか必要ないという実験と発見から得られたものです。このコードでは、-sizeToFitは主にテキストを幅内に保ち、テキストの文字列が短い場合に初期の高さ 40 を減らすことができるかどうかを判断するために使用されます。

于 2013-03-15T17:36:34.730 に答える
0

UIFont プロパティの lineHeight を使用しました。

CGFloat labelHeight = label.font.lineHeight*label.numberOfLines;
于 2013-09-05T14:58:40.233 に答える