Objective c -[NSString sizeWithFont:]在发布和调试版本中返回不同的结果

Objective c -[NSString sizeWithFont:]在发布和调试版本中返回不同的结果,objective-c,ios5,uilabel,sizewithfont,Objective C,Ios5,Uilabel,Sizewithfont,我已经使用此代码多次成功地调整UILabel的帧高度,以适应动态文本: (...) CGSize labelSize = [thelabel.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 在我开始使用iOS5 SDK构建应用程序之前,一切都很顺利 对于armv6设备(iPhone3G/-),构建用于调试时,标签大小可以,但构建用于发布时,检索到的高度

我已经使用此代码多次成功地调整
UILabel
的帧高度,以适应动态文本:

(...)
CGSize labelSize = [thelabel.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
在我开始使用iOS5 SDK构建应用程序之前,一切都很顺利

对于armv6设备(iPhone3G/-),构建用于调试时,标签大小可以,但构建用于发布时,检索到的高度值与宽度相同。我正在实际设备上运行这两个版本

具有以下日志行的示例:

NSLog(@"labelSize: %f %f", labelSize.width, labelSize.height);
输出: iphone3G-调试>

11月3日星期四18:22:50未知应用程序名[1071]:标签大小:115.000000 19.000000

iphone3G-发布>

11月3日星期四18:22:50未知应用程序名[1071]:标签大小:115.000000 115.000000

是否有人可以帮助或提供另一种基于文本长度调整
UILabel
高度的解决方案


我知道关于这个方法有一些类似的问题,但它们没有解决这个特定的问题。

我仍然无法理解这个问题

但是,将UILabel resize方法替换为另一种方法:

//init and store initial rect
CGRect initialLabelRect = CGRectMake(2*kMargin, auxHeight , 200, 0 /*will be overriden*/);
UILabel *dataLabel = [[UILabel alloc] initWithFrame:initialLabelRect];
dataLabel.text = @"long text here";
[dataLabel setFont:[UIFont fontWithName:@"Arial-BoldMT" size:15]];          
//fit size will adjust both width and height, but i'll be discarding the width
[dataLabel sizeToFit];
//set the new frame (initial, but with the computed height)
dataLabel.frame = CGRectMake(initialLabelRect.origin.x, initialLabelRect.origin.y, initialLabelRect.size.width, dataLabel.frame.size.height);

//add and release 
[superview addSubview:dataLabel];
[dataLabel release];
因此,问题依然存在,但目前。。。我将替换此方法的代码引用

如果有人想知道发生了什么事,请告诉我。我猜这是sizeWithFont方法的一个bug。。。但当我们无法理解时,总是更容易归咎于SDK…:)

谢谢大家。干杯。

也有同样的问题

如果您遵循vfonseca提供的链接,您将到达:


选择的答案告诉您如何添加正确的编译器标志来防止这种情况。或者升级到已修复此错误的Xcode 4.3。

我发现返回的大小有所不同,具体取决于代码运行的体系结构。我使用该函数计算了要在UITableViewCells的UILabels中显示的字符串的高度,以便计算单元格的最终高度。我在iPhone4上得到了一个尺寸,一个测试人员在他们的iPod(旧的armv6设备)上得到了大的电池

解决方案发布在此处:


我相信下面描述的优化修复程序也可以工作,但是禁用thumb可能会允许您维护优化设置?我不知道,您必须对此进行测试。

如何设置
constraintSize
?我正在使用初始宽度和一个高值:CGSize constraintSize=CGSizeMake(label.frame.size.width,MAXFLOAT);