UILabel在IOS7中错误地呈现文本

时间:2013-09-25 05:16:48

标签: uilabel ios7

我使用以下代码来计算UILabel

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

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

这里我得到了什么

enter image description here

我做了一个测试,在表格单元格中使用UILabel,在UILabel分别使用UIScrollView,结果与我预期的一致

enter image description here

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

这是什么问题?我错过了什么吗?

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

2 个答案:

答案 0 :(得分:16)

试试这个:

bound.size.height += 1;

<强>更新

根据Apple的文件

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

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

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

bound.size.height = ceil(bound.size.height);

答案 1 :(得分: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];