gpt4 book ai didi

ios - 如何在不卡住主线程的情况下计算 NSAttributedString 的高度

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:41 24 4
gpt4 key购买 nike

我正在开发一款显示包含不同长度文本的帖子的应用程序。当我通过服务器请求获取数据时,我将格式应用于 NSAttributedString,计算特定宽度的文本高度,然后存储该值以供稍后 tableView 调用 heightForRowAtIndexPath: 时使用。

对于每一个新的帖子,我调用这个方法:

- (CGFloat)calculateTextViewHeight:(NSString *)string
{
NSAttributedString *bodyText = [self formatString:string];
UITextView *tempTextField = [[UITextView alloc] init];
tempTextField.attributedText = bodyText;
return [tempTextField sizeThatFits:CGSizeMake(cellWidth, FLT_MAX)].height;
}

这很好用。但是,当我一次循环 50 到 200 个帖子时,tableView 卡住了。根据我的理解,sizeThatFits: 它是一个 UIKit 方法,因此必须在主线程上执行。

有没有一种方法可以在不挂起主线程的情况下计算 NSAttributedString 的高度。或者有没有办法在后台线程上运行 sizeThatFits:

最佳答案

确定您不需要创建临时文本字段吗?

- (CGFloat)calculateTextViewHeight:(NSString *)string
{
NSAttributedString *bodyText = [self formatString:string];
CGRect rect = [bodyText boundingRectWithSize:CGSizeMake(width, FLT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
return CGRectGetHeight(rect);
}

调整选项参数以满足您的需要,

注意:这是在浏览器中编码的

关于ios - 如何在不卡住主线程的情况下计算 NSAttributedString 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20874493/

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