问题:假设宽度为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];
但我发现sizedtoFit变量的宽度为457像素,高度为22像素,并且UI显示一行被裁剪的文本。我期望得到的是宽度为300像素,高度为44像素,可以显示两行。
UILabel文档中关于numberoflines的说明:
当使用sizeToFit方法对接收者进行调整大小时,调整大小考虑此属性中存储的值。例如,如果将此属性设置为3,则sizeToFit方法会调整接收者的大小,使其足够大以显示三行文本。
我尝试了各种组合:
- 将CGRectZero传递给init函数,传递300x400或300 x infinity。
- 创建后设置frame而不是将其传递给init函数。
- 调用[sizeToFit]并希望它计算假定当前宽度的高度,但它没有。
- 调用sizeToFit,然后调用sizeThatFits`。
- 调用layoutIfNeeded。
它们都没有奏效。我做错了什么,还是这是文档和框架实现不一致的bug?谢谢。
sizeToFit
返回了正确的尺寸(高度增加了)。 - Kirk Woll