尝试垂直对齐UILabel文本时出现奇怪的行为

时间:2012-02-04 17:14:11

标签: objective-c ios cocoa-touch

我正在使用最新的SDK和XCode 4.2开发iPhone应用程序

我正在使用此代码垂直对齐以前在UILabel中设置的文本。这是代码:

- (void)resizeLabel:(UILabel *)label
{
    CGSize maximumLabelSize = label.frame.size;

    CGSize expectedLabelSize = [label.text sizeWithFont:label.font 
                                      constrainedToSize:maximumLabelSize 
                                          lineBreakMode:label.lineBreakMode]; 

    //adjust the label the the new height.
    CGRect newFrame = label.frame;
    NSLog(@"NumLines: %d, OldWidth: %f, NewWidth: %f, OldHeight: %f, newHeight: %f", label.numberOfLines, maximumLabelSize.width,  expectedLabelSize.width, maximumLabelSize.height, expectedLabelSize.height);
    newFrame.size.height = expectedLabelSize.height;
    label.frame = newFrame;
}

对于文字:“Iglesia de la Merced”我得到:

NumLines: 2, OldWidth: 205.000000, NewWidth: 153.000000, OldHeight: 39.000000, newHeight: 21.000000

对于文字:“Antiguo convento de los merdarios”我得

NumLines: 2, OldWidth: 205.000000, NewWidth: 187.000000, OldHeight: 39.000000, newHeight: 42.000000


两者都设置为使用两行但文本始终只在一行中绘制。

expectedLabelSize.width小于maximumLabelSize.width时,为什么我会得到双倍身高?

1 个答案:

答案 0 :(得分:1)

我想这是两行包装。

来自doc

  

此方法计算绘制指定字符串所需的指标。此方法列出接收者的文本并尝试制作   它使用指定的字体和换行符符合指定的大小   选项。在布局期间,该方法可能会将文本分成多个   线条使它更适合。如果接收者的文字没有   完全符合指定的大小,它会尽可能多地列出文本   尽可能将其截断(仅用于布局目的)   指定的换行模式。然后它返回的大小   结果截断的字符串。如果高度指定的大小   参数小于单行文本,此方法可能返回一个   高度值大于指定的值。

值得一提的是:
如果将numberOfLines设置为0,它将自动使用尽可能多的行并且需要。

还可以尝试:

myUILabel.numberOfLines = 0;
myUILabel.text = @"Antiguo convento de los merdarios";
[myUILabel sizeToFit];