6

最近使用 XCode 5 将我的应用程序更新到 iOS 7,发现 boundingRectWithSize 给出了不同的高度(在大小部分)计算属性字符串的边界。

以下行在 iOS 6 和 iOS 7 之间给出了不同的结果:

CGRect rect = [self boundingRectWithSize:CGSizeMake(inWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];

“self”是一个 NSAttributedString,“inWidth”是字符串应该适合的最大宽度(以像素为单位)。

我认为那是因为 iOS 7 的字体处理方式与 iOS 6 不同。

任何人都有一个可行的解决方案来计算两个 iOS 版本上的字符串的高度?

4

2 回答 2

7

由于我们不能对所有大于 4.3 的 iOS 使用 sizeWithAttributes,我们必须为 7.0 和以前的 iOS 编写条件代码。所以我建议使用给定的解决方案

UILabel *gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont fontWithName:[AppHandlers zHandler].fontName size:16];
gettingSizeLabel.text = @"YOUR TEXT HERE";
gettingSizeLabel.numberOfLines = 0;
CGSize maximumLabelSize = CGSizeMake(310, 9999); // this width will be as per your requirement

CGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];

该选项非常好,并且在没有条件代码的所有 iOS 中都能顺利运行。

于 2014-04-29T05:36:27.487 回答
1

我有同样的问题,对我来说,高度上的简单 ceil() 解决了它。还要确保为您的属性字符串设置正确的属性,例如

@{NSParagraphStyleAttributeName: paragraphStyle, NSFontAttributeName : label.font}
于 2013-09-27T09:39:48.503 回答