5

我使用以下代码来计算 a 的界限UILabel

CGRect bound = [lblName.text boundingRectWithSize:(CGSize){206, 99999}
                                    options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                 attributes:stringAttributes
                                          context:nil];

UILabel是嵌入在 a 中的,UIScrollView它是 的子视图UITableViewCell

这是我得到的

在此处输入图像描述

我做了一个测试,在表格单元格中使用 a UILabel,在表格单元格UILabelUIScrollView分别使用 a ,结果符合我的预期

在此处输入图像描述

请注意,在所有这些情况下,所有设置(字体、换行模式等)UILabel都是相同的。在所有这些情况下boundingRectWithSize返回相同的结果,唯一的区别是UILabel呈现文本的方式。

这里有什么问题?我错过了什么吗?

更新:仅当我从笔尖加载 UILabel 时才会发生这种情况,如果它是通过编程方式创建的,则没有问题。(我的项目从 xcode 4 迁移到 xcode 5)

4

2 回答 2

16

尝试这个:

bound.size.height += 1;

更新:

根据苹果的文件

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context

此方法返回小数大小(在返回的 CGRect 的大小分量中);要使用返回的大小来调整视图大小,您必须使用 ceil 函数将其值提高到最接近的更高整数。

所以你可能想使用这种方法:

bound.size.height = ceil(bound.size.height);
于 2013-09-25T18:08:19.317 回答
10

我在一些标签上看到了相同的行为,在 iOS 6 中看起来不错,但在 iOS 7 中,它们在顶部和底部有额外的填充,就像在你的图片中一样。

这是我必须做的才能最终让它正确布局viewDidLoad- 适用于 iOS 6 和 7。

self.someLabel.autoresizingMask = UIViewAutoresizingNone;
self.someLabel.frame = CGRectMake(
    self.someLabel.frame.origin.x,
    self.someLabel.frame.origin.y,
    labelWidth, // define elsewhere if you're targeting different screen widths
    self.someLabel.bounds.size.height);
[self.someLabel sizeToFit];
于 2013-09-26T17:05:54.340 回答