繁体   English   中英

UITableViewCell使用自动布局获取子视图高度

[英]UITableViewCell get subview height with auto-layout

我有一个使用自动布局的UITableViewCell子类,一旦完成自动布局过程,我想获取UILabel子视图的高度。

我尝试了layoutSubviews并获取了UILabelframe属性,但这似乎是标签被回收之前的旧高度。

然后,我尝试覆盖layoutIfNeeded但是我发现它从未被调用过。

自动布局完成并应用约束后,如何获取UITableViewCell子视图的框架? 当然,这应该很简单!

假设标签是表格单元格内容视图的直接子视图,那么我的问题是,您可以在layoutSubviews方法中访问表格单元格内容视图的标签界限的最终屏幕值(而不是表单元格本身的layoutSubviews方法)。

但是,如果标签不是多行的,则可以随时随时从其attributedText属性中获取标签的高度,如下所示:

NSAttributedString *attrString = label.attributedText;
CGFloat labelHeight = ceilf(attrString.size.height);

另外,您可以使用标签的font属性来确定标签的高度(同样,仅当标签没有多行时):

UIFont *font = label.font;
CGFloat labelHeight = ceilf(font.lineHeight);

如果标签是多行的,则计算行高的最佳选择如下:

// but you have to know the label's width
CGFloat labelWidth = …
NSAttributedString *attrString = label.attributedText;
CGRect rect = [attrString boundingRectWithSize:CGSizeMake(labelWidth, FLT_MAX) options:NSStringDrawingUsesLineFragmentOrigin context:nil];
CGFloat labelHeight = ceilf(rect.size.height);

您将手动计算标签的宽度。 通常,它是主视图的边界宽度减去水平间距的固定值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM