UILabel在IOS7中错误地呈现文本

jAc*_*OdE 5 uilabel ios7

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

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

UILabel是一个嵌入在a UIScrollView中的子视图UITableViewCell.

在这里我得到了什么

在此输入图像描述

我做了一个试验,其使用UILabel在一个表格单元格,以及UILabelUIScrollView单独,和结果我预期

在此输入图像描述

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

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

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

Tim*_*hen 16

试试这个:

bound.size.height += 1;
Run Code Online (Sandbox Code Playgroud)

更新:

根据Apple的文件

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context
Run Code Online (Sandbox Code Playgroud)

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

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

bound.size.height = ceil(bound.size.height);
Run Code Online (Sandbox Code Playgroud)


Dav*_*Nix 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];
Run Code Online (Sandbox Code Playgroud)