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

Objective c 标签的大小在设置后会发生变化,具体取决于字符串,objective-c,cocoa-touch,ios,nsstring,Objective C,Cocoa Touch,Ios,Nsstring,我在为两个不同的字符串获得正确的帧时面临一个问题。我正在通过以下代码运行两个字符串: UILabel *myLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; myLabel.lineBreakMode = UILineBreakModeWordWrap; myLabel.numberOfLines = 2; myLabel.textAlignment = UITextAlignmentCenter; myLabel

我在为两个不同的字符串获得正确的帧时面临一个问题。我正在通过以下代码运行两个字符串:

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];
UILabel*myLabel=[[UILabel alloc]initWithFrame:CGRectZero]autorelease];
myLabel.lineBreakMode=UILineBreakModeWordWrap;
myLabel.numberOfLines=2;
myLabel.textAlignment=UITextAlignmentCenter;
myLabel.font=[UIFont boldSystemFontOfSize:11];
myLabel.text=@“关于商店”
myLabel.text=@“关于河流”
CGSize myLabelSize=CGSizeMake(70,28);
[myLabel sizeWithFont:myString.font//宽度:70,高度:28
myString2的结果宽度:70,高度:14

为什么这里有差异?

我看到的问题:

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

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

您似乎不太清楚如何使用此字体。我已经发布了一个关于如何正确使用sizeWithFont的答案。您应该在此处查看:


顺便说一句,这就是为什么你会看到高度的不同…我认为一个垃圾值被作为font-size参数传入。如果你对font-size参数进行硬编码,你会看到一致的结果。

只需替换代码,试试看……我不知道它是否有效(请检查:)

标签中也缺少“;”

myLabel.text=@“关于商店”; myLabel.text=@“关于河流”`


关于..

有一点不同,因为系统字体是Helvetica,这是一种可变大小的字体。myString1中的文本比myString2中的文本宽得惊人,因此字符串需要换行到第二行才能适合。因为您指定了最大2行和UILineBreakModeWordWrap,这就是您得到的。如果您希望它适合o第一行,将myLabelSize加宽一点,或者使用更小的字体。

什么是myString.font?什么是AlabeSize?第二行缺少分号。@Jason:更新了我的问题。这是UILabel。@Siddharth:我更新了我的问题。这不是NSString,而是UILabel。@Abhinav:你看了链接了吗?回答有帮助吗?您是否也将myLabel.font作为“sizeWithFont”中的字体参数传递方法?@Siddharth:是的,我正在将正确的值传递给sizeWithFont,并使用断点进行检查。对于我的两个文本,字体和约束大小相同,但返回的结果不同。对于一个文本,它将其包装为两行,而对于另一个文本,它将其保存在一行。@Abhinav:您可以粘贴您传递的大小约束吗?size Constaint=(70,28)。这里一个字符串的宽度为69,因此它将该字符串保持在一行中,而另一个字符串则跨越70。我很惊讶,因为字符串中的字符数相同。
[myLabel sizeWithFont:[UIFont fontWithName:@"Helvetica-Bold" size:11]     
constrainedToSize:myLabelSize  lineBreakMode:UILineBreakModeWordWrap];