我使用以下代码来计算UILabel
CGRect bound = [lblName.text boundingRectWithSize:(CGSize){206, 99999}
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes:stringAttributes
context:nil];
UILabel
嵌入在UIScrollView
中,是UITableViewCell
的子视图。
这里我得到了什么
我做了一个测试,在表格单元格中使用UILabel
,在UILabel
分别使用UIScrollView
,结果与我预期的一致
请注意UILabel
的所有设置(字体,换行模式等)在所有情况下都是相同的。 boundingRectWithSize
在所有这些情况下返回相同的结果,唯一的区别是UILabel
呈现文本的方式。
这是什么问题?我错过了什么吗?
UPDATE :只有当我从nib加载UILabel时才会发生这种情况,如果是以编程方式创建的,则没有问题。 (我的项目从xcode 4迁移到xcode 5)
答案 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];