我已经使用此代码调整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
的身高吗?
我知道这个方法有一些类似的问题,但它们没有解决这个问题。
答案 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?
我确定下面介绍的优化修复程序也可以,但是禁用拇指可能会让您保持优化设置?我不知道,你必须测试一下。