2012-07-24 107 views
4

沒有太多的代碼可供分享,只是一個問題。爲什麼如果標籤的高度超過8191像素,我的標籤就不可見?UILabel有最大高度嗎?

你可能認爲這太過分了,爲什麼在這個世界上我想要這樣一個長長的標籤......它是動態的,所以你永遠不知道。我創建了我的UIScrollView,並開始在init中添加標籤,其中5個標籤。我設置了文字,很好走。我有一個方法,將採取5個標籤,與NSString sizeWithFont:constrainedToSize:lineBreakMode:獲取大小,重新排列它們,並重置UIScrollView的contentHeight。都好。事情是,當一個標籤的高度像素(和300寬度)正好超過8191時,它會消失,不可見,蓬鬆!不見了。

如果我不能得到這個工作,我想我可以分割成多個文本的文本,並創建額外的UILabels,但我想避免這種情況。

任何想法?

下面是一些僞代碼,易於遵循

NSError *er = nil; 
    // this file can be found here: 
    // https://gist.github.com/3167635 
NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"lorem.txt"]; 
NSString *labelText = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&er]; 
if(er != nil) 
    NSLog(@"Error: %@", er); 

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: self.view.bounds]; 
[scrollView setBackgroundColor:[UIColor whiteColor]]; 

UILabel *label = [[UILabel alloc] init]; 
[label setBackgroundColor:[UIColor whiteColor]]; 
[label setNumberOfLines:0]; 
[label setText:labelText]; 


CGSize size = [labelText sizeWithFont:label.font constrainedToSize:CGSizeMake(300, CGFLOAT_MAX) lineBreakMode:UILineBreakModeCharacterWrap]; 

NSLog(@"Size: %@", NSStringFromCGSize(size)); 
CGRect labelFrame; 
labelFrame.origin = CGPointMake(10, 0); 
labelFrame.size = size; 

[label setFrame:labelFrame]; 
[scrollView setContentSize:size]; 
[scrollView addSubview:label]; 

[[self view] addSubview:scrollView]; 

虛擬文字是巨大的,使得標籤不可見。

+0

@eselk你不應該添加基本上說「我有同樣的問題..」,「我要..」等等的評論等問題得到http:// stackoverflow。 com/privileges/protect-questions來阻止這類事情。 – Popeye 2013-04-11 11:19:57

回答

0

我使用sizeToFit財產提示,而不是自己設置的高度 因爲這個屬性將根據烏拉圭回合的文本設置標籤的高度,你不必須採取設置高度的努力

或你可以用這行代替

CGSize maximumLabelSize = CGSizeMake(headerView.frame.size.height,over 8191); 
+0

你能解釋你的答案嗎?爲什麼使用'sizeToFit'屬性來自己設置高度? – Popeye 2013-04-11 09:09:23

+0

因爲這個屬性會根據你的文本設置標籤的高度,你不用花費很大的努力來設置高度 – 2013-04-11 11:10:18

+0

請在你的回答中解釋而不是在評論中。說這種用法並不能解釋爲什麼。 – Popeye 2013-04-11 11:13:59