我正在使用最新的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
时,为什么我会得到双倍身高?
答案 0 :(得分:1)
我想这是两行包装。
来自doc:
此方法计算绘制指定字符串所需的指标。此方法列出接收者的文本并尝试制作 它使用指定的字体和换行符符合指定的大小 选项。在布局期间,该方法可能会将文本分成多个 线条使它更适合。如果接收者的文字没有 完全符合指定的大小,它会尽可能多地列出文本 尽可能将其截断(仅用于布局目的) 指定的换行模式。然后它返回的大小 结果截断的字符串。如果高度指定的大小 参数小于单行文本,此方法可能返回一个 高度值大于指定的值。
值得一提的是:
如果将numberOfLines设置为0,它将自动使用尽可能多的行并且需要。
还可以尝试:
myUILabel.numberOfLines = 0;
myUILabel.text = @"Antiguo convento de los merdarios";
[myUILabel sizeToFit];