objective-c - NSAttributedString boundingRectWithSize 在 iOS 6 和 iOS 7 之间给出不同的高度

标签 objective-c ios6 ios7 xcode5

最近使用 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.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 中都非常好并且运行顺畅。

关于objective-c - NSAttributedString boundingRectWithSize 在 iOS 6 和 iOS 7 之间给出不同的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19047465/

相关文章:

objective-c - 堆叠 presentViewController 后 statusBarFrame = 0

iOS 6 CLLocationManager 最后位置

objective-c - 在 iOS 版 Google Analytics 2 中跟踪事件的正确方法是什么

ios - UIApplication.shared.isNetworkActivityIndi​​catorVisible 设置为 false 时崩溃

iphone - 如何在运行时将一行插入 iPhone 上的 UITableView?

iphone - 用户从 ABPeoplePickerNavigationController 选择联系人后立即显示 MFMessageComposeViewController

objective-c - 在 SpriteKit 中使用 SKLabelNode 插入换行符

iphone - iOS 7 和 Helvetica Neue UltraLight : use as default for older iOS versions

ios - NSUserDefaults 在 iOS7 中不保存?

objective-c - Cocoa 中的辅助函数