web-dev-qa-db-ja.com

ラベル内のテキストを「大きな」フレームで垂直方向に揃えることは可能ですか?

私のアプリケーションでは、カスタムセルを含む複数のテーブルビューがあります。セル内のテキストの一部は2〜4行に分散されているため、ラベルの高さはコンテンツを含めるのに十分な大きさです。

ただし、iPadでは画面が大きくなり、numberOfLinesプロパティを使用するときのように、テキストをラベルの左上に表示し、中央ではなく表示したいと思います。テキストを水平方向に配置できることは知っていますが、テキストを左上に配置することもできるはずです。またはそれは不可能ですか。

スクリーンショット:

enter image description here

23
LuckyLuke

不可能UILabelのテキストを垂直方向に揃えることはできません。ただし、sizeWithFont:メソッドNSStringを使用してラベルの高さを動的に変更し、そのxおよびy必要に応じて。

別の方法として、ITextFieldを使用できます。 IControlのサブクラスであるため、contentVerticalAlignment peopertyをサポートします。ユーザーがテキストを入力できないようにするには、serInteractionEnabled[〜#〜] no [〜#〜]に設定する必要があります。それ。

20
EmptyStack

IOS7ではsizeWithFont:は非推奨になりました! UILabelのサブクラス化などのいくつかのソリューションは、適応する必要があります。

上揃えのラベルテキストに対する私の解決策:サブクラス内TopVerticalAlignmentLabel : UILabelオーバーライドdrawRect: 次のように:

- (void)drawRect:(CGRect)rect
{
    CGRect labelStringRect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX)
                                                     options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                                  attributes:@{ NSFontAttributeName: self.font, /* further attributes */}
                                                     context:nil];

    [super drawTextInRect:CGRectMake(0, 0, self.frame.size.width, labelStringRect.size.height)];
}
3
AppsolutEinfach

あなたは次のようにそれを行うことができます

  1. ラベルのnumberOfLinesプロパティをIBから0に設定します

  2. ラベルのlineBreakModeUILineBreakModeWordWrapとして設定します(非常に重要

ラベルに設定したものには、@ "\ n"をいくつか追加するだけです。

[yourTextLabel setText:@"myLabel\n\n\n\n\n"];
3
Fahim Parkar

私は実際に使用していることに気づきました

[Blue setSizeToFit]

上部に垂直に配置されます。デフォルトは中央に配置されます。

3
nembleton

sizeToFitは、セルがスクロール中に再利用されるため、UITableCellViewでは機能しません。

解決策は、フォントとフォントサイズに従ってテーブルのセルの高さを計算し、それに合わせてラベルの高さを調整することです。

ウェブで解決策を見つけるのは非常に困難だったので、私はそれについて short post を書きました

3
Hons

viewDidLoadに追加しました

self.textLabel.numberOfLines = 0;
[self.textLabel sizeToFit];

ラベルが縮小または拡大できるように、制約が正しく設定されていることを確認してください。そうでなければ、それは機能しません。

2
carmen_munich

これはSomeOneが尋ねた同じ質問です。あなたはこの問題を解決するためのより適切な方法を見つけるでしょう。彼らはそれについて素晴らしい説明をしました。

そう思うので、これを見てください。

このスレッドでは、多くの回答が、以下に説明するコードスニペットのように、textに基づいてUILabelの動的フレームを設定することを提案しています。

    CGSize theStringSize = [textToBeUsed sizeWithFont:lblTitle.font  constrainedToSize:labelSize lineBreakMode:lblTitle.lineBreakMode];
    lblTitle.frame = CGRectMake(lblTitle.frame.Origin.x, lblTitle.frame.Origin.y, theStringSize.width, theStringSize.height);
    lblTitle.text = theText;

   // lblTitle is the Label used for showing the Text.

textFieldここにあります を使用するよりも正確なアイデアを得ることができます

1
Kamar Shad

UITextViewを使用し、そのUserInteraction EnabledをNoに設定するだけで、すべての問題が解決されます。

0