问题:假设宽度为300像素,请确定UILabel
所需的大小(行数)。字符串较长,因此我将lineBreakMode
设置为UILineBreakModeWordWrap
并调用sizeThatFits
尝试确定大小。但它在单行中的宽度为457像素,而不是在两行中的预期300像素。
请参阅:
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];
但是我发现sizetoFit变量的宽度为457像素,高度为22 px,并且UI用剪切后的文本显示一行。我期望两行的宽度为300像素,高度为44 px。
用于numberoflines的UILabel文档说:
使用
sizeToFit
方法调整接收器的大小时,调整大小时会考虑存储在此属性中的值。例如,如果将此属性设置为3,则sizeToFit
方法将调整接收者的大小,使其足够大以显示三行文本。我尝试了以下各种组合:
CGRectZero
传递给init函数,传递300x400或300 x无穷大。 init
函数。 [sizeToFit]
并希望它假设当前宽度来计算高度,但事实并非如此。 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/