2012-09-25 26 views
1

对于我正在开发的项目,当前的开发阶段存在很大问题。向iOS应用程序添加大量动态格式文本

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

问题是,应用程序的实际内存使用跳转到近70MB(活字节3MB),这是不能接受的,以我目前的概念,我将不得不使用~200 UILabels为了实现我的目标。

我该怎么办?有没有办法延迟加载UILabels或重用它们?我应该使用UITextView还是UIWebView?

我该怎么做?

谢谢。

+2

['UITableView'](http://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html)有什么问题? – DrummerB

+0

你是否暗示我应该使用UITableView? – Razvan

+1

看看使用DTCoreText。它会渲染真正长的属性字符串,可能正是你所需要的。我在商店的应用程序中使用它。 –

回答

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的好东西像文本格式:d!

我希望以上会帮助很多人:)!

谢谢你们的支持!

2

我会推荐使用像https://github.com/AliSoftware/OHAttributedLabel或UIWebView OHAttributedLabel应该有一个比WebView少得多的内存足迹,但它取决于你实际需要多少网络视图。

如果你使用一个UIWebView

你会得出一个Web视图在视图中,如果您正在使用IB创建和挂钩网点,然后在您的m的HTML格式的文本加载到通过loadHTMLString:基本URL :

+0

听起来有趣,我会研究它。谢谢 ! – Razvan

相关问题