私のアプリケーションでは、カスタムセルを含む複数のテーブルビューがあります。セル内のテキストの一部は2〜4行に分散されているため、ラベルの高さはコンテンツを含めるのに十分な大きさです。
ただし、iPadでは画面が大きくなり、numberOfLines
プロパティを使用するときのように、テキストをラベルの左上に表示し、中央ではなく表示したいと思います。テキストを水平方向に配置できることは知っていますが、テキストを左上に配置することもできるはずです。またはそれは不可能ですか。
スクリーンショット:
不可能UILabelのテキストを垂直方向に揃えることはできません。ただし、sizeWithFont:メソッドNSStringを使用してラベルの高さを動的に変更し、そのxおよびy必要に応じて。
別の方法として、ITextFieldを使用できます。 IControlのサブクラスであるため、contentVerticalAlignment peopertyをサポートします。ユーザーがテキストを入力できないようにするには、serInteractionEnabledを[〜#〜] no [〜#〜]に設定する必要があります。それ。
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)];
}
あなたは次のようにそれを行うことができます
ラベルのnumberOfLines
プロパティをIBから0に設定します
ラベルのlineBreakMode
をUILineBreakModeWordWrap
として設定します(非常に重要)
ラベルに設定したものには、@ "\ n"をいくつか追加するだけです。
[yourTextLabel setText:@"myLabel\n\n\n\n\n"];
私は実際に使用していることに気づきました
[Blue setSizeToFit]
上部に垂直に配置されます。デフォルトは中央に配置されます。
sizeToFit
は、セルがスクロール中に再利用されるため、UITableCellView
では機能しません。
解決策は、フォントとフォントサイズに従ってテーブルのセルの高さを計算し、それに合わせてラベルの高さを調整することです。
ウェブで解決策を見つけるのは非常に困難だったので、私はそれについて short post を書きました
viewDidLoad
に追加しました
self.textLabel.numberOfLines = 0;
[self.textLabel sizeToFit];
ラベルが縮小または拡大できるように、制約が正しく設定されていることを確認してください。そうでなければ、それは機能しません。
これは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
ここにあります を使用するよりも正確なアイデアを得ることができます
UITextViewを使用し、そのUserInteraction EnabledをNoに設定するだけで、すべての問題が解決されます。