UILabel有最大高度吗?

时间:2012-07-24 02:34:20

标签: objective-c uilabel

分享的代码不多,只是一个问题。如果我的标签高度超过8191像素,为什么我的标签不可见?

你可能认为这太过分了,为什么世界上我想要这么长的标签......它是动态的,所以你永远不会知道。

所以这就是它:我创建了我的UIScrollView并开始在init中添加标签,其中5个。我设置了文本并且很好。我有一个方法,将采用5个标签,获取NSString sizeWithFont:constrainedToSize:lineBreakMode:的大小,重新排列它们并重置UIScrollView的contentHeight。都好。事实是,当一个标签的高度像素正好超过8191(宽度为300)时,它会消失,不可见,噗!走了。

如果我不能让它工作,我想我可以将文本分成多个部分并创建额外的UILabel,但我想避免这种情况。

有什么想法吗?

这是一些虚拟代码,易于理解

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];

虚拟文字很大,使标签不可见。

1 个答案:

答案 0 :(得分:0)

我建议使用sizeToFit属性而不是自己设置高度 因为此属性将根据您的文本设置标签的高度,您不必花费设置高度

或者您可以使用此行代替

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