UILabel
をどのように底から整列させることができるか。私のラベルは、3行のテキストを保持することができます。入力テキストが1行の場合、この行はラベルの下に来るはずです。オレンジ色の領域はラベルのフルフレームです。現在は1行で中央に揃えられています。だから私が欲しいのは、何行にもかかわらず、常に底を揃えるべきです。UILabelテキストを下から揃えるには?
あなたのアイデアを提案してください。
ありがとうございます。
UILabel
をどのように底から整列させることができるか。私のラベルは、3行のテキストを保持することができます。入力テキストが1行の場合、この行はラベルの下に来るはずです。オレンジ色の領域はラベルのフルフレームです。現在は1行で中央に揃えられています。だから私が欲しいのは、何行にもかかわらず、常に底を揃えるべきです。UILabelテキストを下から揃えるには?
あなたのアイデアを提案してください。
ありがとうございます。
はここでそれを行うの2つの方法があり...
1.
は、まず0にnumberOfLines
を設定し、その
contentSize
で
UILabel
ので、あなたの
UILabel
ディスプレイの
sizeToFit
プロパティを使用します。
yourLabel.numberOfLines = 0;
[yourLabel sizeToFit];
このリンクから、より多くの情報を参照してください:Vertically align text within a UILabel
2.別のオプションではなくUILabel
のUITextField
を取ることであり、以下のようにNO
にuserInteractionEnabled
を設定...
[yourTextField setUserInteractionEnabled:NO];
と次にcontentVerticalAlignment
プロパティを下に設定します。
[yourTextField setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];
UPDATEまた
、UITextField
で、我々は複数の行を達成することはできません。その代わりに、UITextView
を使用してuserInteractionEnabled
をNO
に設定することができます。次に、下のコードを使用して一番下に配置します。
CGFloat topCorrect = ([label bounds].size.height - [label contentSize].height);
topCorrect = (topCorrect <0.0 ? 0.0 : topCorrect);
label.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
あなたはUILabel
をサブクラス化してメソッドをオーバーライドすることができます:あなたが使用したい矩形で超drawTextInRect
- (void)drawTextInRect:(CGRect)rect
コール。
また、 - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines;を使用することもできます。 より明白かもしれません。 – Dustin
サブクラスUILabelは
@interface Label : UILabel
@end
その後、私は同じ問題を持っていたので、
@implementation Label
- (void)drawTextInRect:(CGRect)rect
{
if(alignment == top) {
rect.size.height = [self sizeThatFits:rect.size].height;
}
if(alignment == bottom) {
CGFloat height = [self sizeThatFits:rect.size].height;
rect.origin.y += rect.size.height - height;
rect.size.height = height;
}
[super drawTextInRect:rect];
}
@end
これは実際には私にとって完璧に動作しますが、ほとんど何の努力もなく、他のソリューションのようにハッキリしません。 –
ようdrawTextInRectオーバーライドします。
[self alignLabel:self.mediaTitle withText:@"My text to align" verticalAlignOption:1];
別のオプション:1つのラベルを使用
- (void)alignLabel:(UILabel *)l withText:(NSString *)text verticalAlignOption:(int)vertAlign{
CGSize stringSize = [text sizeWithFont:l.font constrainedToSize:l.frame.size lineBreakMode:l.lineBreakMode];
switch (vertAlign) {
case 0: // align = top
l.frame = CGRectMake(l.frame.origin.x,
l.frame.origin.y,
l.frame.size.width,
stringSize.height
);
break;
case 1: // align = bottom
l.frame = CGRectMake(l.frame.origin.x,
(l.frame.origin.y + l.frame.size.height) - stringSize.height,
l.frame.size.width,
stringSize.height
);
break;
case 2: // align = middle
// default
break;
}
l.text = text;
}
AHDは、あなたが簡単な下に整列するために、このようなメソッドを呼び出します。ここに私は私のUILabelの下にテキストを整列させる作った方法ですあなたの背景色については、私はこれをoriginalLabelと呼び、私の例ではtextLabelというテキストの別のものを呼び出します。次に、高さを計算し、YはtextLabel座標:私は最大拘束するためのコードとも行数を使用することなく、私のために動作IBスーパービューに底制約を設定
[textLabel sizeToFit];
int height = textLabel.frame.size.height;
int yCoord = originalLabel.frame.origin.y +
originalLabel.frame.size.height - height;
textLabel.frame = CGRectMake(originalLabel.frame.origin.x, yCoord,
textLabel.frame.size.width, height);
。
私はすでに最初の解決策を試しています。しかし、それは正常に動作していません。常に上と下に配置されます。しかし、それは常に一番下と中央に整列されるべきです。しかし、2番目の解決策が働いているようです。 2番目のソリューションの複数のラインはどうですか?それは可能でしょうか? – NSUserDefault
3行のこのフレームが 'CGRectMake(10,100,100,300);'であれば、 'CGRectMake(10,260,100,300);'のようにフレームを1行だけ取得すると、最高です:) –
ヤ秒は最高です。私はしようとすると知っている。 – NSUserDefault