gpt4 book ai didi

ios - 需要一种更快的方法来计算 UILabel sizeThatFits

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:08:34 27 4
gpt4 key购买 nike

我对布局有一些非常具体的要求,这迫使我创建一堆 UILabel,使用 sizeThatFits 并相应地定位它们。然后将这些标签放置在 UITableView 的每个单元格中。单元格的高度由标签的大小决定。

生成每个单元格时,花费的时间是可以接受的。当我向表中添加新数据时,问题就来了。由于单元格高度取决于标签,我目前所做的是为单元格创建标签并测量结果高度。当我添加 20 个左右的新对象时,事情会变慢,因为 tableView:heightForRowAtIndexPath: 会同时调用所有新对象。这种方法的第二个问题是,由于它使用了一堆 UILabel,它必须在主线程上运行,所以事先进行计算并不是一个真正的选择。

我需要的是一种捕获 UILabel sizeThatFits 行为的好方法,只是速度更快,而且最好能够在后台线程上运行。

它只需要在 iOS 7 上运行。

最佳答案

使用此方法传入一个 NSString,它将返回给定字体的估计大小(我在这里使用系统字体大小 15,320 是单元格的宽度):

- (CGSize)sizeOfText:(NSString*)text{

NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15.0f]}];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){320, CGFLOAT_MAX}
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];

return CGSizeMake(rect.size.width, rect.size.height);

然后在您的 heightForRowAtIndexPath 中,这是您设置单元格大小的方式:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [self sizeOfText:[yourdatasource objectAtIndex:indexPath.row]].height;
}

关于ios - 需要一种更快的方法来计算 UILabel sizeThatFits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21636626/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com