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

时间:2011-11-03 18:25:00

标签: objective-c ios5 uilabel sizewithfont

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

(...)
CGSize labelSize = [thelabel.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

一切顺利,直到我开始使用iOS5 SDK构建我的应用程序。

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

以下日志行的示例:

NSLog(@"labelSize: %f %f", labelSize.width, labelSize.height);

输出: iphone3G - debug>

  

Thu 11月3日18:22:50未知的appname [1071]:labelSize:115.000000 19.000000

iphone3G - 发布>

  

Thu 11月3日18:22:50未知的appname [1071]:labelSize:115.000000 115.000000

任何人都可以帮助或提供另一种解决方案,根据文字长度调整UILabel的身高吗?

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

4 个答案:

答案 0 :(得分:3)

好吧,似乎这一切都归结为Xcode中针对armv6设备的代码优化工具的一个错误。产生各种功能中的错误和各种奇怪的行为。

在以下帖子中尝试解决方案后,现在一切正常: App Store code runs different from Xcode/Device code on iPhone 3G

感谢。

答案 1 :(得分:1)

有同样的问题。

如果您按照vfonseca提供的链接进行操作,请到达:Is there a way to compile for ARM rather than Thumb in Xcode 4?

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

答案 2 :(得分:0)

我仍然无法理解这个问题。

尽管用另一种方法替换了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 ... :)

谢谢大家。欢呼声。

答案 3 :(得分:0)

我发现了什么sizeWithFont:constrainedToSize:lineBreakMode:将返回,具体取决于运行代码的架构。我已经使用该函数来计算我想在UITabel中显示的字符串的高度,以便我可以计算单元格的最终高度。我在我的iPhone 4上得到了一个尺寸,而一个测试人员正在他们的iPod(旧的armv6设备)上放置大型电池。

解决方案发布在此处:Is there a way to compile for ARM rather than Thumb in Xcode 4?

我确定下面介绍的优化修复程序也可以,但是禁用拇指可能会让您保持优化设置?我不知道,你必须测试一下。