问题:确定 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
方法会调整接收器的大小,使其足够大以显示三行文本。
我尝试了以下各种组合:
- 将
CGRectZero
传递给 init 函数,传递 300x400 或 300 x 无穷大。 - 在创建后设置框架,而不是将其传递给
init
函数。 - 调用
[sizeToFit]
并希望它计算假设当前宽度的高度,但事实并非如此。 - 调用 sizeToFit,然后调用 sizeThatFits`。
- 调用
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/