2012-09-25 45 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

相關問題