我想从相同的给定文本中动态计算UILabel的行数和高度。
发布于 2011-08-24 18:38:08
在UILabel实例上调用-sizeToFit
将自动调整其大小以适应其显示的文本,无需计算。如果你需要大小,你可以在那之后从label的frame属性中得到它。
label.numberOfLines = 0; // allows label to have as many lines as needed
label.text = @"some long text";
[label sizeToFit];
NSLog(@"Label's frame is: %@", NSStringFromCGRect(label.frame));
发布于 2013-07-31 03:58:48
从iOS 7开始,当前的解决方案已被弃用。
以下是更新后的解决方案:
+ (CGFloat)heightOfCellWithIngredientLine:(NSString *)ingredientLine
withSuperviewWidth:(CGFloat)superviewWidth
{
CGFloat labelWidth = superviewWidth - 30.0f;
// use the known label width with a maximum height of 100 points
CGSize labelContraints = CGSizeMake(labelWidth, 100.0f);
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
CGRect labelRect = [ingredientLine boundingRectWithSize:labelContraints
options:NSStringDrawingUsesLineFragmentOrigin
attributes:nil
context:context];
// return the calculated required height of the cell considering the label
return labelRect.size.height;
}
我的解决方案设置为这样的原因是因为我使用了一个UITableViewCell,并根据标签将占用的空间动态地调整单元格大小。
发布于 2015-02-17 09:14:12
在不调用sizeToFit的情况下,您可以使用即插即用的解决方案以数字方式完成所有这些操作:
+ (CGFloat)heightForText:(NSString*)text font:(UIFont*)font withinWidth:(CGFloat)width {
CGSize size = [text sizeWithAttributes:@{NSFontAttributeName:font}];
CGFloat area = size.height * size.width;
CGFloat height = roundf(area / width);
return ceilf(height / font.lineHeight) * font.lineHeight;
}
我经常在动态分配高度的UITableViewCells中使用它。
@Salman Zaidi也解决了属性问题。
https://stackoverflow.com/questions/7174007
复制相似问题