设置后标签的大小会发生变化,具体取决于字符串

时间:2011-05-24 16:51:59

标签: objective-c cocoa-touch ios nsstring

我在为两个不同的字符串获取正确的框架时遇到了问题。我通过以下代码运行两个字符串:

UILabel *myLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
myLabel.lineBreakMode = UILineBreakModeWordWrap;
myLabel.numberOfLines = 2;
myLabel.textAlignment = UITextAlignmentCenter;
myLabel.font = [UIFont boldSystemFontOfSize:11];
myLabel.text = @"About Stores"
myLabel.text = @"About Rivers"

CGSize myLabelSize = CGSizeMake(70,28);
[myLabel sizeWithFont:myString.font     // <-- One of two strings
    constrainedToSize:aLabelSize 
        lineBreakMode:UILineBreakModeWordWrap];

myString1 =&gt;的结果宽度:70,高度:28
myString2 =&gt;的结果宽度:70,高度:14

为什么这里有区别?

3 个答案:

答案 0 :(得分:0)

我看到的问题:

1

NSString没有字体属性。您可能希望将“myString.font”替换为UILabel.font,其中UILabel将替换为您计划用于显示字符串的UILabel实例。

2

sizeWithFont应该返回存储在CGSize实例中的CGSize。

似乎你对使用它不是很清楚。我已经发布了一个如何正确使用sizeWithFont的答案。你应该在这里查看:Place two UILabels side by side left and right without knowing string length of text in left label

顺便说一下,这就是你看到高度差异的原因......我认为垃圾值正在作为字体大小参数传递。如果您对字体大小参数进行硬编码,则会看到一致的结果。

答案 1 :(得分:0)

只需更换代码即可试一试.....我知道如果它有效jus check:)

[myLabel sizeWithFont:[UIFont fontWithName:@"Helvetica-Bold" size:11]     
constrainedToSize:myLabelSize  lineBreakMode:UILineBreakModeWordWrap];

还有“;”标签中缺少

myLabel.text = @“关于商店”; myLabel.text = @“关于里弗斯”;`

问候..

答案 2 :(得分:0)

有一点不同,因为系统字体是Helvetica,它是一个可变大小的字体。 myString1中的文本比myString2中的文本宽泛,因此字符串需要换行到第二行才能适应。既然你指定了2行max和UILineBreakModeWordWrap,那就是你得到的。如果您希望它适合一行,请将myLabelSize放宽一点,否则使用较小的字体大小。