2012-07-24 62 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