错误的CGRect for boundingRectWithSize:options:attributes:context:

时间:2014-08-28 05:09:19

标签: ios objective-c ios7 nsstring

我在UITableViewCell中有一个UILabel。 UILabel的高度取决于使用自动布局约束的UITableViewCell的高度。 UILabel的宽度为176.0且已修复。

我在UILabel中使用boundingRectWithSize:options:attributes:context:来确定UITableViewCell的高度。

以下是在interface-builder

中显示UILabel配置的屏幕截图

enter image description here

enter image description here

这是获取UILabel文本的boundingRect的代码。

        NSString *text = @"Extra long goods charge";
        CGSize maxSize = CGSizeMake(176.0f, MAXFLOAT);
        CGRect rect = [text boundingRectWithSize:maxSize
                                         options:NSStringDrawingUsesLineFragmentOrigin
                                      attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16.0]}
                                         context:nil];

返回的尺寸为152.132813, 18.1796875,但此尺寸不足以包含Extra long goods charge文字。事实上,即使是大小为176, 18的矩形也不能包含此文本。

我的猜测是,我在某种程度上在使用boundingRectWithSize

1 个答案:

答案 0 :(得分:0)

尝试改变。换行符为"字符换行"并添加约束作为标签高度。 查看带有大小的边界矩形是否返回正确的值。

如果没有,则删除所有约束并检查标签高度并根据所有标签高度(boundingrectwithSize返回的值)计算行高应该是什么,并调整heightForRowAtIndexPath委托中单元格的高度UITableView的方法。这可能是您的文字未显示的另一个原因,尽管标签的高度显示了预期的内容。

尝试一次。

[编辑]

我没有正确地得到你应该得到的适当高度,这就是为什么它弄乱了文本的显示。 如果是这种情况,那么你可以尝试这种方法。

NSString *message =@"Your text here!";
CGSize expectedLabelSize = [message sizeWithFont:[UIFont systemFontOfSize:16.0f] constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByCharWrapping];

虽然如果是这种情况,那么上面的方法在iOS 7中已被弃用,但它的工作原理很好。