如何从底部alignmentUILabel文本?
UILabel
如何从底部alignment。 比方说,我的标签可以容纳三行文字。如果input的文字是单行,那么这行应该在标签的底部。请参考下面的图片以便更好的理解。 橙色区域是标签的整个框架。目前它有一条线,它是alignment的中心。 所以我想要的是,无论有多less行,它总是应该alignment底部。
请提出你的想法。
谢谢。
这里有两种方法做这个…
1.首先将numberOfLines
设置为0,然后使用UILabel
sizeToFit
属性,让你的UILabel
显示其contentSize
。
yourLabel.numberOfLines = 0; [yourLabel sizeToFit];
查看此链接的更多信息: 垂直alignmentUILabel中的文本
2.另一个select是采取UITextField
而不是UILabel
并将userInteractionEnabled
设置为NO
如下所示…
[yourTextField setUserInteractionEnabled:NO];
然后将contentVerticalAlignment
属性设置为如下所示的底部….
[yourTextField setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];
UPDATE
另外,用UITextField
,我们不能实现多行。 因此,我们可以使用UITextView
并将其userInteractionEnabled
设置为NO
。 然后,使用下面的代码使其底部alignment。
CGFloat topCorrect = ([label bounds].size.height - [label contentSize].height); topCorrect = (topCorrect <0.0 ? 0.0 : topCorrect); label.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
子类UILabel
@interface Label : UILabel @end
然后像这样覆盖drawTextInRect
@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
我只设置一个底层约束,在IB中的超级视图,这为我工作,而不使用代码,也为最大限制的行数。
我遇到过同样的问题。 下面是我如何将文本alignment到我的UILabel的底部:
- (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; }
你是简单的调用这个方法来alignment底部:
[self alignLabel:self.mediaTitle withText:@"My text to align" verticalAlignOption:1];
另一个select:使用一个标签为你的背景颜色,我称这一个originalLabel,另一个为文本,在我的例子中称为textLabel。 然后计算textLabel的高度和Y坐标:
[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);
您可以UILabel
并覆盖该方法:
- (void)drawTextInRect:(CGRect)rect
用你想要使用的矩形调用超级drawTextInRect
。