我有一个UICollectionView,如下所示。您可以看到 titleLabel 应根据内容改变其高度。背景视图 labelView 也应更改其高度。我怎么能这样做?
我用过......
-(CGFloat) heightForText:(NSString *)text withWidth:(CGFloat) textWidth{
CGSize constraint = CGSizeMake(textWidth, 20000.0f);
CGRect rect = [text boundingRectWithSize:constraint
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:cell.titleLabel.font}
context:nil];
CGFloat height = rect.size.height;
height = ceilf(height);
// NSLog(@"height %f", height);
return height;
}
我喜欢这样......
CGRect newFrame = cell.titleLabel.frame;
newFrame.size.height = height;
cell.titleLabel.frame = newFrame;
我正在将新框架添加到标签上。但是高度从固定的y向下增加。现在我必须根据高度抬起y。还有其他方法吗?
答案 0 :(得分:4)
这是方法
-(CGFloat) heightForText:(NSString *)text withWidth:(CGFloat) textWidth{
CGSize constraint = CGSizeMake(textWidth, 20000.0f);
CGRect rect = [text boundingRectWithSize:constraint
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:cell.titleLabel.font}
context:nil];
CGFloat height = rect.size.height;
height = ceilf(height);
// NSLog(@"height %f", height);
return height;
}
答案 1 :(得分:1)
使用ankit的代码获取标签所需的高度并使用autoLayout,如下所示。
为单元格superView添加视图---> 设置前导,尾随和底部约束。
然后将标签作为subView添加到此视图.ADD所有四个约束。设置前导,尾随,顶部和底部约束
现在,使用上面的Ankit代码(我已粘贴到下面)获取标签的高度并将其设置为标签框。
-(CGFloat) heightForText:(NSString *)text withWidth:(CGFloat) textWidth{
CGSize constraint = CGSizeMake(textWidth, 20000.0f);
CGRect rect = [text boundingRectWithSize:constraint
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:cell.titleLabel.font}
context:nil];
CGFloat height = rect.size.height;
height = ceilf(height);
// NSLog(@"height %f", height);
return height;
}
现在将新框架设置为标签。
CGRect newFrame = cell.titleLabel.frame;
newFrame.size.height = height;
cell.titleLabel.frame = newFrame;
希望它有效。正是要正确设置自动布局。试试并告诉我。