带有 NSAttributedString 的 Cell 使 UITableView 的滚动变慢

2023-12-11

我有一个包含多种单元格的表视图。其中之一是带有 TextView 的单元格,在这个文本视图中,我必须渲染一个NSAttributedString从数据来看。这必须在主线程上完成,根据苹果文档:

不应从后台线程调用 HTML 导入器(即选项字典包含值为 NSHTMLTextDocumentType 的 NSDocumentTypeDocumentAttribute)。它会尝试与主线程同步,失败并超时。从主线程调用它是可行的(但如果 HTML 包含对外部资源的引用,仍然可能会超时,应该不惜一切代价避免这种情况)。 HTML 导入机制旨在实现类似 markdown 的功能(即文本样式、颜色等),而不是用于一般的 HTML 导入。

但以这种方式渲染会导致表视图的滚动滞后,并且还会扰乱自动布局。这是我的单元格内的代码。

dispatch_async(dispatch_get_main_queue(), ^{
    NSString* htmlString = [NSString stringWithFormat:@"<div style=\"font-family:%@; font-size:%dpx; color:#08080d;\">%@</div>",fontNameBase, 16,txt];
    htmlString = [Utility replaceHtmlCodeEntities:htmlString];
    NSData* tempData = [htmlString dataUsingEncoding:NSUnicodeStringEncoding];
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:tempData  options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType} documentAttributes:nil error:nil];
    self.textViewMsg.attributedText = txt;
});

我像这样滚动我的 tableView:

-(void)reloadAndScroll{
    [self.tableChat reloadData];

    long lastRowNumber = [_tableChat numberOfRowsInSection:0] - 1;
    if (lastRowNumber > 0) {
        NSIndexPath* indexPath = [NSIndexPath indexPathForRow:lastRowNumber inSection:0];
        [_tableChat scrollToRowAtIndexPath:indexPath        
        atScrollPosition:UITableViewScrollPositionBottom animated:NO];
    }
}

是否有其他方法可以创建属性字符串而不会出现这些问题?


我认为您必须在模型类中创建属性字符串,以便行方法的表视图单元格不会在滚动时创建新的属性字符串,希望它能很好地帮助您,谢谢

+(AttributedModel *)methodToGetAttributedDetail :(NSString *)txt {

    AttributedModel *objModel = [[AttributedModel alloc] init];

   NSString* htmlString = [NSString stringWithFormat:@"<div style=\"font-family:%@; font-size:%dpx; color:#08080d;\">%@</div>",fontNameBase, 16,txt];
   htmlString = [Utility replaceHtmlCodeEntities:htmlString];
   NSData* tempData = [htmlString dataUsingEncoding:NSUnicodeStringEncoding];
   NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:tempData  options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType} documentAttributes:nil error:nil];

   objModel.attributedString  = attributedString;

   return objModel;
}

在表视图的 CellforRow 方法中使用此模型值

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 NSAttributedString 的 Cell 使 UITableView 的滚动变慢 的相关文章

  • 滚动时多个图像淡出

    我有一个页面 在每个导航点上 网站中间的图像通过淡入淡出来改变颜色 我设法淡入 active3 fadeIn 2000 不过 我遇到了再次淡出它的问题 让我尝试解释一下 我有 5 个导航点和 5 个不同的图像 如果我 例如 从第一个导航点滚
  • NSString 对象的最大长度是多少?

    NSString 对象中可以保存的最大字符串大小是多少 这会动态变化吗 我假设 NSString 的硬限制是 NSUIntegerMax 个字符 因为 NSString 的索引和大小相关的方法返回 NSUInteger 由于当前能够运行 i
  • Xcode - 发布和分发配置中的 Malloc_Error

    仅当我在设备上选择发布或分发配置时 我才会收到此错误 在模拟器上它运行良好 请问 我错在哪里 cc1obj 4113 malloc mmap size 429379584 failed error code 12 error can t a
  • 更改目录时 Gitlab CI 运行程序作业失败退出状态 1

    我正在使用我的个人机器作为使用 Fastlane 的 iOS 项目的运行程序 这主要是因为共享运行器没有为 iOS 设置 因为它们没有安装 Xcode 更改目录时我的作业立即失败 它是一个 shell 运行程序 根本没有其他自定义配置 有什
  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • 与 parse-server 和 auth0 的自定义身份验证集成

    我想将 auth0 com 与开源解析服务器结合使用 我当前的方法是通过 iOS 的 Lock 库使用标准登录从 auth0 获取令牌 使用该令牌 我想在解析服务器上调用自定义身份验证方法 该方法检查令牌是否有效 如果有效则将登录用户 我的
  • 在 Xcode 中查找未使用的文件

    我最近开始开发一个新应用程序 它基本上是我以前制作的应用程序的副本 但做了一些更改 为了制作这个新应用程序 我复制了旧应用程序并删除了一些不需要的内容 我想知道 有没有办法知道 Xcode 中正在使用哪些类文件 或者有什么关于如何查找未使用
  • 从字典创建 Swift 对象

    如何根据 Swift 字典中的查找值动态实例化类型 希望这对其他人有用 我们需要进行一些研究才能弄清楚这一点 目标是避免巨大的 if 或 switch 语句从值创建每个对象类型的反模式 class NamedItem CustomStrin
  • iOS 7 NS 单线程安全合并冲突

    重新排序两行后 在单线程应用程序上保存简单的数据时遇到问题 我已经成功地简化了编码以重现错误 并且希望其他人尝试这一点时得到第二个意见 这是一次健全性检查 因为我怀疑 iOS 7 引入的核心数据问题 而这在 iOS 6 中工作正常 首先 启
  • SDK 和 iOS 部署目标。

    我使用最新的 SDK 4 1 构建项目并设置 iOS 部署目标 3 0 如果我使用4 0 sdk的某些方法 我可以在真正的iPhone 3 0上运行我的项目吗 您只能在 OS 3 设备上运行您的项目 如果有条件地编码围绕您想要使用的 OS
  • UITableViewCell 内嵌套 UIStackView 内的 UILabel 有时会被截断

    我的一个表设置中有一个表视图单元格 其中包含以下视图层次结构 外部水平 stackview 固定到单元格内容视图的尾部 前部 底部和顶部边缘 右侧标签固定到其父 stackViewHackView 的尾部 前部 底部和顶部边缘 在我的控制器
  • 将 NSAttributedString 的子字符串替换为另一个 NSAttributedString

    我想替换一个子字符串 例如 replace of an NSAttributedString和另外一个NSAttributedString 我正在寻找一种等效的方法NSString s stringByReplacingOccurrence
  • Swift 单元测试 - 如何断言 CGColor 是它应该的样子?

    使用 Xcode V7 2 尝试进行单元测试 需要验证是否已设置正确的颜色 并收到以下消息 Cannot invoke XCTAssertEqual with an argument list of type CGColor CGColor
  • Objective-C 点表示法与类方法?

    请注意 我特别指的是点表示法与类方法一起使用 而不是与实例方法一起使用 出于好奇 我想看看如果我尝试在类方法中使用 Objective C 点表示法语法会发生什么 我的实验如下 import
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • dispatch_semaphore_t 重用 - 我在这里缺少什么?

    我有一些代码 其中使用dispatch semaphore t 来表示操作完成 当信号量是成员变量时 它的行为似乎不正确 我将展示有效的示例代码和似乎无效的示例代码 implementation someClass dispatch sem
  • 如何制作像 Facebook 应用程序一样的登录屏幕?

    如何制作像 Facebook 应用程序一样带有 电子邮件 和 密码 文本字段的登录屏幕 Facebook登入 http extdesenv com wp content uploads 2012 05 facebook login ios
  • 带有自定义字体的 UILabel 错误呈现

    在我的 iPhone 应用程序中 我为所有 UILabel 设置了自定义字体 更准确地说 我对 UILabel 进行了子类化 重写了一个方法 在该方法中设置了自定义字体 然后将 IB 中的所有标签设置为该自定义类 现在的问题是 所有文本都渲
  • TestFlight 安装的应用程序因 Swift 包管理器依赖项而崩溃

    我们已经迁移了一些 CocoaPod 依赖项 以便在 Xcode 11 中使用 Swift Package Manager 进行构建和链接 但是 每当我们将应用程序提交到 AppStore Connect 并使用 TestFlight 进行
  • iOS 中是否需要 Google App Indexing SDK 才能使用 Google DeepLinking?

    我想用谷歌应用程序索引与我的网页和 iOS 应用程序 我支持通用链接 or 深层链接用谷歌术语 与苹果Search并相应地设置我的网页 From 谷歌文档 https developers google com app indexing i

随机推荐

  • 如何使用selenium python点击谷歌上的第一个结果

    我正在尝试点击谷歌结果上的第一个结果 这是我的代码 我在其中输入从 csv 文件读取的 chennai craiglist 所以我确信有机结果中的第一个链接将是 chennai craiglist org 但我很安静 不知道该怎么做 fro
  • 如何用awk合并两个文件?

    我有两个文件的顺序相同 并且行数相同 file1 仅2列 562 201 RIR1 562 202 RIR1 562 203 RIR1 562 204 RIR1 562 205 RIR1 562 206 RIR1 562 207 RIR1
  • 库未在 Python 中初始化(pygame)

    所以我有一个在类函数中创建的字体 我在代码中多次调用这个函数并且它运行得很好 但是有一次当我调用它时它说 self font pygame font Font None self text size RuntimeError Library
  • UWP 项目中的条件包引用

    我想使用一个 NuGet 包仅用于调试配置 我found如果我有一个针对 Creators Update 15063 的 UWP 项目 则可以在 Visual Studio 2017 中执行此操作
  • Odoo 规则实际上运行正常吗?

    我的目的 我试图使用安全规则来实现以下目的 我需要在用户模型中添加一个字段 该字段将设置每个用户可以修改哪些仓库 这是因为我想隐藏您不允许看到的库存变动 其他仓库的库存变动 我做了什么 我创建了一个多对多字段命名allowed wareho
  • Bootstrap 工具提示不起作用

    我在这里要疯了 我有以下 HTML a href title A nice tooltip test a 而且Bootstrap风格的工具提示拒绝显示 只是一个普通的工具提示 我的 bootstrap css 工作得很好 我可以看到其中的类
  • c++11 如何实现`std::string ToString(std::tuple &t)`?

    我想要一个非常友好的ToString许多类型的函数 包括std tuple 函数是这样的 template
  • 绘制 100% 堆叠图问题

    我得到了一个数据框 df5 其中包含我从 read csv 读取的下表 Week Days Category Total Products Sold Total Profit 0 Monday A 3221 9999 53 0 Monday
  • 32 位 .NET 最大字节数组大小是否 < 2GB?

    我一直在研究一些与字节数组的最大大小相关的问题 here and here 并一直在玩一些数组并得到一些我不太明白的结果 我的代码如下 byte myByteArr byte myByteArr2 new byte 671084476 fo
  • 多个 WebClient 不工作?

    我正在尝试使用三个单独的 WebClient 下载三个文件 我用这个 void client1 OpenReadCompleted object sender OpenReadCompletedEventArgs e MessageBox
  • 如何搜索哈希表?

    我刚刚开始学习哈希表 我了解如何插入但不知道如何搜索 这些是我将基于这个问题的算法 散列密钥 int Hash int key return key 10 table has a max size of 10 用于解决碰撞的线性探测 假设我
  • 在 Laravel 中显示输入数组的验证错误

    我正在向我的控制器提交一组输入 如下所示
  • 使用 JsonObjectRequest 和 GET 请求发送 JSON 正文

    我需要通过 get 方法发送 json 代码 我尝试通过 JsonObjectRequest 发送方法 url 和参数 响应为 null 并且未发送 json JSONObject request new JSONObject try re
  • Hibernate 查询中的 Unicode 字符串

    在 SQL 中 我们可以编写一个查询来搜索人名 如下所示 SELECT FROM Person P WHERE P Name LIKE N ike 该查询将使用 unicode 字符运行 假设名称列和数据库设置为处理 unicode 支持
  • SubprocVecEnv 无法与自定义环境一起使用(稳定基线 - 健身房)

    我使用gym Env作为父类创建了一个自定义环境 并且一切都可以很好地运行单核 我已经开始代码如下 class MyEnv gym Env 但是 如果我尝试使用 SubprocVecEnv 使用所有 24 个 CPU 核心来加速学习过程 我
  • 简单的媒体播放器从文件路径播放mp3?

    我有一个非常简单的播放背景的媒体播放器 它从 apk 调用文件 但我希望它可以从任何目录播放 例如音乐或 SD 卡 这是我的代码 private MediaPlayer mpintro mpintro MediaPlayer create
  • 如何在后台线程上每秒执行一个方法,这样就不会影响应用程序的性能

    我尝试每 30 秒访问一次数据库 但是 每当该方法执行时 我都可以清楚地看到应用程序的性能下降 到目前为止 这是我当前的代码 var timer Timer override func viewDidLoad super viewDidLo
  • dart 中 Paper 元素的实例

    我怎样才能获得一个实例paper input下面的元素 HTML 文件
  • Delphi - 智能指针和泛型 TList

    我有一个智能指针的实现 并且我尝试在通用 TList 上实现它 program Project2 APPTYPE CONSOLE R res uses System SysUtils System Generics Collections
  • 带有 NSAttributedString 的 Cell 使 UITableView 的滚动变慢

    我有一个包含多种单元格的表视图 其中之一是带有 TextView 的单元格 在这个文本视图中 我必须渲染一个NSAttributedString从数据来看 这必须在主线程上完成 根据苹果文档 不应从后台线程调用 HTML 导入器 即选项字典