以编程方式将UILabel文本对齐到底部?

时间:2015-10-14 12:02:10

标签: ios objective-c alignment uilabel vertical-alignment

有没有办法以编程方式将UILabel文本对齐到框架的底部?

它应该如何:

1 line of text:

 ____________
|            |
|            |
|            |
|            |
| some text1 |
 ____________


2 lines of text:

 ____________
|            |
|            |
|            |
| some text1 |
| some text2 |
 ____________

1 个答案:

答案 0 :(得分:0)

您可以按照this answer:

中的说明扩展UILabel类
#pragma mark VerticalAlign
@interface UILabel (VerticalAlign)
- (void)alignTop;
- (void)alignBottom;
@end


@implementation UILabel (VerticalAlign)
- (void)alignTop
{
    CGSize fontSize = [self.text sizeWithFont:self.font];

    double finalHeight = fontSize.height * self.numberOfLines;
    double finalWidth = self.frame.size.width;    //expected width of label


    CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];


    int newLinesToPad = (finalHeight  - theStringSize.height) / fontSize.height;

    for(int i=0; i<= newLinesToPad; i++)
    {
        self.text = [self.text stringByAppendingString:@" \n"];
    }
}

- (void)alignBottom
{
    CGSize fontSize = [self.text sizeWithFont:self.font];

    double finalHeight = fontSize.height * self.numberOfLines;
    double finalWidth = self.frame.size.width;    //expected width of label


    CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];


    int newLinesToPad = (finalHeight  - theStringSize.height) / fontSize.height;

    for(int i=0; i< newLinesToPad; i++)
    {
        self.text = [NSString stringWithFormat:@" \n%@",self.text];
    }
}
@end

并且为了对齐你只需要使用:

[myLabel alignBottom];

修改
sizeWithFont弃用时,您可以试用此解决方案。我没有测试,但你可以通过它i =一次。 https://stackoverflow.com/a/22849805/4685283