【问题标题】:Adding a lot of dynamic formatted text to iOS App向iOS App添加大量动态格式化文本
【发布时间】:2012-09-25 23:34:58
【问题描述】:

我正在处理的项目的当前开发阶段存在一个大问题。

我有一个 UIScrollView,它包含 50 个多行 UILabel,其中包含从 localizable.string 加载的动态内容。标签具有单独的格式(字体、粗体、斜体、颜色)。

问题是应用程序的实际内存使用量跃升至近 70MB(实时字节 3MB),这是不可接受的,按照我目前的概念,我必须使用大约 200 个 UILabel 才能实现我的目标。

我能做什么?有没有办法延迟加载 UILabel 或重用它们?我应该使用 UITextView 还是 UIWebView ?

我该怎么做?

谢谢。

【问题讨论】:

  • UITableView 有什么问题?
  • 你是在暗示我应该使用 UITableView 吗?
  • 看看使用DTCoreText。它将呈现非常长的属性字符串,并且可能正是您所需要的。我在商店的应用程序中使用它。
  • 谢谢,我正在调查。
  • 如果可以的话,我肯定会使用UITableView。这肯定是比使用数百个 UILabel 更好的选择。

标签: ios xcode uiwebview uilabel uitextview


【解决方案1】:

我建议使用https://github.com/AliSoftware/OHAttributedLabel 或 UIWebView OHAttributedLabel 之类的东西,它的内存占用应该比 WebView 小得多,但这取决于您实际需要多少 Web 视图。

如果你使用 UIWebView

如果您使用 IB 创建并连接网点,然后在您的 .m 中通过 loadHTMLString:baseURL:

将 html 格式的文本加载到您的视图中,您将在您的视图中绘制一个 Web 视图

【讨论】:

  • 听起来很有趣,我会研究一下。谢谢!
【解决方案2】:

伙计们,在你们的帮助下,我想出了这个非常有效的解决方案!

我正在使用一个带有标记的 html“模板”文件和一个 UIWebView。

基本上我正在做的事情如下:

  1. 获取html文件路径。
  2. 用 html 模板的内容创建一个字符串。
  3. 用我的字符串替换 html 中的标记(NSLocalized 字符串 - 大量文本)。
  4. 使用“loadHTMLString”将新创建的字符串的内容加载到 WebView 中。

结果:从 70MB 的内存占用,现在我有 12MB 的内存占用(相当于约 20 个 A4 文本页)。

代码如下:

    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"yourhtmlfile" ofType:@"html"];
NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[_webView setBackgroundColor:[UIColor clearColor]];
    [_webView setOpaque:NO];

NSString *htmlBody = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF16StringEncoding error:nil];

htmlBody = [htmlBody stringByReplacingOccurrencesOfString:@"//marker_1//" withString:NSLocalizedString(@"localizedKey_1", nil)];
htmlBody = [htmlBody stringByReplacingOccurrencesOfString:@"//marker_2//" withString:NSLocalizedString(@"localizedKey_2", nil)];
htmlBody = [htmlBody stringByReplacingOccurrencesOfString:@"//marker_3//" withString:NSLocalizedString(@"localizedKey_3", nil)];

[self.webView loadHTMLString:htmlBody baseURL:baseURL];

现在我可以使用像文本格式这样的 html 好东西了!

希望以上内容能帮到很多人:)!

谢谢大家的支持!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多