5

共有するコードが多すぎるわけではありません。ただの質問です。高さが 8191 ピクセルを超えるとラベルが表示されないのはなぜですか?

これは多すぎると思うかもしれませんが、なぜこんなに長いラベルが必要なのですか...動的なので、決してわかりません。

これがその方法です: UIScrollView を作成し、init にラベルを 5 つ追加し始めます。テキストを設定して、準備完了です。5 つのラベルを取得し、 でサイズを取得し、NSString sizeWithFont:constrainedToSize:lineBreakMode:それらを並べ替えて、UIScrollView の contentHeight をリセットするメソッドがあります。すべて良い。問題は、ラベルの高さが 8191 ピクセル (および幅が 300 ピクセル) をちょうど超えると、表示されずに消えてしまうことです。なくなった。

これが機能しない場合は、テキストを複数の部分に分割して追加の 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];

ダミーテキストは巨大で、ラベルが見えなくなります。

4

1 に答える 1

0

高さを自分で設定する代わりにプロパティを使用することをお勧めしsizeToFitます。このプロパティはテキストに従ってラベルの高さを設定するため、高さを設定する手間をかける必要はありません。

または、代わりにこの行を使用できます

CGSize maximumLabelSize = CGSizeMake(headerView.frame.size.height,over 8191 );
于 2013-04-11T08:46:39.230 に答える