为了账号安全,请及时绑定邮箱和手机立即绑定

将文本垂直对齐到UILabel中的顶部

将文本垂直对齐到UILabel中的顶部

iOS
慕仙森 2019-06-12 14:49:14
将文本垂直对齐到UILabel中的顶部我有一个UILabel有两行文字的空格。有时,当文本太短时,此文本将显示在标签的垂直中心。如何垂直对齐文本,使其始终位于UILabel?
查看完整描述

3 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

  1. 设置新的文本:

    myLabel.text = @"Some Text"
  2. 设置maximum number为0行(自动):

    myLabel.numberOfLines = 0
  3. 将标签的框架设置为最大大小:

    myLabel.frame = CGRectMake(20,20,200,800)
  4. 打电话sizeToFit以缩小帧大小,使内容只适合:

    [myLabel sizeToFit]

标签框架现在已经足够高,足够宽,适合你的文字。左上角应保持不变。我只测试了这与左上角对齐的文本。对于其他对齐,您可能需要修改后的框架。

另外,我的标签已经启用了单词包装。


查看完整回答
反对 回复 2019-06-12
?
慕森卡

TA贡献1806条经验 获得超8个赞

参考扩展解决方案:

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

应改为

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

在每增加的换行符中都需要额外的空间,因为iPhoneUILabels后面的回车似乎被忽略了:

类似地,对齐Bottom也应该使用@" \n@%"代替"\n@%"(对于周期初始化,必须替换为“for(int i=0.”)。)。

以下分机适用于我:

// -- file: UILabel+VerticalAlign.h#pragma mark VerticalAlign@interface UILabel (VerticalAlign)- (void)alignTop;
- (void)alignBottom;@end// -- file: UILabel+VerticalAlign.m@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

然后打电话[yourLabel alignTop];[yourLabel alignBottom];每次你的标签文字作业之后。


查看完整回答
反对 回复 2019-06-12
  • 3 回答
  • 0 关注
  • 764 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信