我有一个UICollectionView,如下所示。 titleLabel 如您所见应根据内容改变其高度.background视图 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抬起,还有其他方法吗?
最佳答案
使用ankit的代码获取标签所需的高度,并使用autoLayout,如下所示。
添加一个视图---> ,设置相对于单元格SuperView的前导,尾部约束和底部约束。
然后将标签作为子视图添加到此视图。添加所有四个约束。即设置前导,尾随,顶部和底部约束
现在,使用上面的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;
希望它能工作。 就是正确设置autolayout 。尝试一下,让我知道。