7

私はUILabelを持っています。彼のテキストサイズにはプロパティがあります

title.adjustsFontSizeToFitWidth = YES;

これにより、標準の方法を使用して UILabel のサイズを変更できなくなります。関数を使用することになっている別の投稿をここで読みました

sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode

この回答から: -adjustsFontSizeToFitWidth が YES に設定されている場合、UILabel のフォント サイズを把握する方法は?

今、私はそれを機能させる方法を理解できません..これは実際のコードです

UIFont *font = [UIFont fontWithName:@"Marker Felt" size:200];
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, width, 20.0)];
title.text = @"this is a long title that should be resized";
title.font = font;
title.numberOfLines = 1;
title.adjustsFontSizeToFitWidth = YES;

CGFloat pointSize = 0.0;
CGSize size = [title.text sizeWithFont:font 
                           minFontSize:title.minimumFontSize 
                        actualFontSize:&pointSize 
                              forWidth:width 
                         lineBreakMode:title.lineBreakMode];
title.frame = CGRectMake(title.frame.origin.x, 
                         title.frame.origin.y, 
                         size.width, 
                         size.height);

フォントサイズがまだ200であるかのように、UILabelのサイズが間違って変更されます..手がかりはありますか? ありがとう!

4

5 に答える 5

8

私のgithubで使用できるコードがいくつかあります。チェックしてください。これはUILabelのカテゴリです。フレーム幅を設定する必要があり、UILabelでresizeToFitできる場合は、コンテンツに合わせて高さを調整し、yを返しますラベルの末尾の位置を調整して、その後に表示されるコンテンツを調整できます。

https://gist.github.com/1005520

于 2011-08-30T12:16:15.103 に答える
6

これをバグとして報告することをお勧めします。

によって返されるサイズに-sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:は正しい幅がありますが、高さではなく、実際のフォント サイズが考慮されていません。

UILabelこのバグもある可能性が高いようです。によって返されるサイズのフォントのテキストの高さに一致するようにラベルのサイズを変更すると、ラベル-sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:内のテキストが垂直方向に正しく配置されません。

回避策は、正しい高さを計算し、ラベルのフォントを実際のフォント サイズに変更することです。

CGFloat pointSize = 0.0f;
CGRect frame = title.frame;
frame.size = [title.text sizeWithFont:font
                          minFontSize:title.minimumFontSize
                       actualFontSize:&pointSize
                             forWidth:width
                        lineBreakMode:title.lineBreakMode];
UIFont *actualFont = [UIFont fontWithName:@"Marker Felt" size:pointSize];
CGSize sizeWithCorrectHeight = [title.text sizeWithFont:actualFont];
frame.size.height = sizeWithCorrectHeight.height;
title.frame = frame;
title.font = actualFont;
于 2011-08-30T12:56:23.887 に答える
2

fontSizeを小さくしてフォントを作成してみてください。例えば:

UIFont *font = [UIFont fontWithName:@"Marker Felt" size:20];

ただし、actualFontSizeにリンクをCGFloat==200に渡します。

更新しました:

次にこれを試してください:

UIFont *font = [UIFont fontWithName:@"Marker Felt" size:20];
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, width, 20.0)];
title.text = @"this is a long title that should be resized";
title.font = font;
title.numberOfLines = 1;
title.adjustsFontSizeToFitWidth = YES;

CGFloat pointSize = 0.0;
CGSize size = [title.text sizeWithFont:font minFontSize:title.minimumFontSize actualFontSize:&pointSize forWidth:width lineBreakMode:title.lineBreakMode];
title.frame = CGRectMake(title.frame.origin.x, title.frame.origin.y, size.width, size.height);
font = [UIFont fontWithName:@"Marker Felt" size:200];
title.font = font;
于 2011-08-30T12:30:59.393 に答える
0

組み込みコンテンツサイズを試しましたか?

    myLable.numberOfLines = 0
    myLable.frame = CGRect(x: 10, y: 10, width: 300, height: lblSuperscript.intrinsicContentSize().height)
于 2015-12-29T07:08:10.057 に答える
0
UILabel * label = [[UILabel alloc] init];
        [label setNumberOfLines:0];
        label.text=[detailDict valueForKey:@"method"];
        [label setFont:[UIFont fontWithName:@"Georgia" size:16.0]];
        CGSize labelsize=[label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(250, 1000.0) lineBreakMode:UILineBreakModeWordWrap];
        int y=0;
        label.frame=CGRectMake(38, y, 245, labelsize.height);
        [label setBackgroundColor:[UIColor clearColor]];
        [label setTextColor:[UIColor whiteColor]];
        scrollView.showsVerticalScrollIndicator = NO;
        y+=labelsize.height;
        [scrollView setContentSize:CGSizeMake(200,y+50)];
        [scrollView addSubview:label];
        [label release];

このコードを使用する必要があると思います。スクロールビューのラベルを使用して大きなテキストを表示することもできます

于 2011-08-30T12:08:24.557 に答える