0

我如何使用boundingRectWithSize:options:attributes:context:返回与 a完全相同的大小?intrinsicContentSizeUILabel

例如,如果我像下面这样使用它,我会得到最多 1 个像素的差异:

const CGSize maxSize = CGSizeMake(label.frame.size.width, CGFLOAT_MAX);
NSDictionary * attributes = @{NSFontAttributeName:self.font};
CGSize textSize = [label.text boundingRectWithSize:maxSize
                                           options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                        attributes:attributes
                                           context:nil].size;
NSLog(@"1: %@", NSStringFromCGSize(label.intrinsicContentSize));
NSLog(@"2: %@", NSStringFromCGSize(textSize));

例如:

1: {53, 17}
2: {52.122002, 18}

的文档boundingRectWithSize说:

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

53所以和之间的区别52.122002是有道理的,可以通过使用来处理ceil。但是,1像素的高度差不能。

我应该完全使用其他东西吗?

4

0 回答 0