3

我已经使用此代码成功调整了 aUILabel的框架高度以适应动态文本多次:

(...)
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]:labelSize:115.000000 19.000000

iphone3G - 发布 >

11 月 3 日星期四 18:22:50 未知应用名称 [1071]:labelSize:115.000000 115.000000

任何人都可以帮助或为我提供另一种解决方案来UILabel根据文本长度调整高度吗?

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

4

3 回答 3

1

有同样的问题。

如果您按照 vfonseca 提供的链接,您会到达:有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 进行编译?

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

于 2012-04-05T09:33:33.157 回答
0

我发现 sizeWithFont:constrainedToSize:lineBreakMode: 将根据您的代码运行的架构返回的差异。我已经使用该函数来计算要在 UITableViewCells 中的 UILabels 中显示的字符串的高度,以便计算单元格的最终高度。我在我的 iPhone 4 上获得了一种尺寸,而一位测试人员在他们的 iPod(旧 armv6 设备)上获得了大容量电池。

解决方案发布在这里:Is there a way to compile for ARM 而不是 Thumb in Xcode 4?

我确信下面描述的优化修复也有效,但禁用拇指可能会让您保持优化设置?我不知道,你必须测试一下。

于 2012-07-13T18:06:09.033 回答
0

我还没有设法理解这个问题。

虽然,用另一种方法替换了 UILabel 调整大小方法:

//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 方法上的一个错误......但是当我们无法理解时总是更容易归咎于SDK...... :)

谢谢你们。干杯。

于 2011-11-04T09:29:48.237 回答