iphone - UILabel 的 sizeToFit/sizeThatFits 忽略 numberoflines 属性

标签 iphone cocoa-touch

问题:确定 UILabel 需要的大小(行数),假设宽度为 300 像素。该字符串较长,因此我将 lineBreakMode 设置为 UILineBreakModeWordWrap 并调用 sizeThatFits 来尝试确定大小。但它给出的单行宽度为 457 px,而不是预期的两行 300 px。

请参阅:

CGSize available = CGSizeMake(300, INFINITY);
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 400)] autorelease];
label.text = title;
label.lineBreakMode = UILineBreakModeWordWrap;
label.font = [UIFont fontWithName:kBoldFont size:kTitleFontSize];
label.numberOfLines = 3;
CGSize sizedtoFit = [label sizeThatFits:available];

但我发现 sizedtoFit 变量的宽度为 457 像素,高度为 22 像素,并且 UI 显示带有剪切文本的单行。我预计两行的宽度为 300 像素,高度为 44 像素。

numberoflines 的 UILabel 文档说:

当使用 sizeToFit 方法调整接收器大小时,调整大小时会考虑存储在此属性中的值。例如,如果此属性设置为 3,则 sizeToFit 方法会调整接收器的大小,使其足够大以显示三行文本。

我尝试了以下各种组合:

  1. CGRectZero 传递给 init 函数,传递 300x400 或 300 x 无穷大。
  2. 在创建后设置框架,而不是将其传递给 init 函数。
  3. 调用[sizeToFit]并希望它计算假设当前宽度的高度,但事实并非如此。
  4. 调用 sizeToFit,然后调用 sizeThatFits`。
  5. 调用layoutIfNeeded

它们都不起作用。我做错了什么,或者这是文档和框架实现不一致的坏错误?谢谢。

最佳答案

我遇到了同样的问题,适合的尺寸只是忽略了尺寸.../: 我最终使用:

CGRect textSize = [UILabel textRectForBounds:CGRectMake(0, 0, 300, CGFLOAT_MAX) 
                      limitedToNumberOfLines:3];

工作起来就像一个魅力......:)

文档说你不应该直接调用它,但我已经使用它有一段时间了,通过批准提交的应用程序,一切都很棒......:)

关于iphone - UILabel 的 sizeToFit/sizeThatFits 忽略 numberoflines 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5041874/

相关文章:

objective-c - NSThread 和对象保留计数问题

iphone - 仅使用 CSS 检测对 CSS 属性的支持

iphone - MKMapView -> 为我的位置显示一个按钮

iphone - 为什么在保存 NSManagedObjectContext 'clean' 时出现合并错误?

iphone - 将 double 值表示为 NSString

ios - 在 UIButton 中添加图像作为附件

iphone - 使用NSDateFormatter将字符串转换为NSDate会在1年内返回差额

java - iPhone 拒绝 UDP 数据包的一些可能原因是什么?

android - 检测 phonegap 中的假/模拟位置?

iphone - 轴标签也随图表一起滚动 : how to disable?