2012-09-25 4 views
1

저는 현재 개발중인 프로젝트에서 현재 개발 단계에서 큰 문제가 있습니다.iOS App에 많은 동적 형식의 텍스트 추가

저는 localizable.string에서로드 된 동적 내용으로 50 개의 여러 줄 UILabels를 보유하고있는 UIScrollView를 보유하고 있습니다. 레이블은 개별적으로 서식이 지정됩니다 (글꼴, 굵게, 기울임 꼴, 색상).

문제는 응용 프로그램의 실제 메모리 사용량이 거의 70MB (라이브 바이트 3MB)로 점프하고 그만큼 용납 될 수없는 것이고 현재 목표를 달성하기 위해 200 개 UILabels를 사용해야한다는 것이 문제입니다.

어떻게해야합니까? UILabel을 게으른로드하거나 재사용 할 수있는 방법이 있습니까? 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의 메모리 풋 프린트를가집니다.

여기에 코드입니다 :

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

를 사용하는 경우는 IB 만들고 콘센트를 연결 한 다음하는 .m에 loadHTMLString를 통해에 HTML 형식의 텍스트를로드 사용하는 경우

당신은 당신의보기에서 웹보기를 그릴 것 : base을을 :

+0

재미있는 소리, 나는 그것을 들여다 볼 것이다. 고맙습니다 ! – Razvan