0

ラベルを設定しましたが、ラベルにはテキストが含まれています。次に、すべてのテキストがラベルに収まるようにフォントを設定します。ラベルのテキストは毎日変わるので、私はその最小フォントサイズを使用しました。しかし、突然それは機能しなくなります。私は何か間違ったことをしていますか?

ここに私のコード:

CGRect infoLabelRect = CGRectMake(10, 250, 260, 350);


UILabel *infoLabel = [[UILabel alloc] initWithFrame:infoLabelRect];
infoLabel.text = @"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla";
infoLabel.numberOfLines = 9;
infoLabel.font = [UIFont systemFontOfSize:17];
infoLabel.minimumFontSize = 12;
infoLabel.adjustsFontSizeToFitWidth = YES;
infoLabel.textColor = [UIColor whiteColor];
infoLabel.textAlignment = NSTextAlignmentCenter;
infoLabel.backgroundColor = [UIColor clearColor];
infoLabel.shadowColor = [UIColor blackColor];
infoLabel.shadowOffset = CGSizeMake(0, 1);
[infoLabel sizeToFit];

悲しいことを試してみましたが、テキストが表示されません。

これが機能しない私のコードです。助言がありますか?

UILabel *infoLabel = [[UILabel alloc] initWithFrame:infoLabelRect];
    NSString *text = @"bla bla bla";
    UIFont *font = nil;
    CGFloat points = 17;
    CGFloat maxHeight = infoLabel.frame.size.height;
    CGFloat textHeight;
    do {
        font = [UIFont systemFontOfSize:points];
        CGSize size = CGSizeMake(infoLabelRect.size.width, 100000);
        CGSize textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode: NSLineBreakByWordWrapping];
        textHeight = textSize.height;
        points -= 1;
    } while (textHeight > maxHeight);

    infoLabel.font = font;
    infoLabel.textColor = [UIColor whiteColor];
    infoLabel.textAlignment = NSTextAlignmentCenter;
    infoLabel.backgroundColor = [UIColor clearColor];
    infoLabel.shadowColor = [UIColor blackColor];
    infoLabel.shadowOffset = CGSizeMake(0, 1);
    [infoLabel sizeToFit];
    [contentView addSubview:infoLabel];
4

1 に答える 1

2

の使用はminimumFontSize、1行のラベルにのみ適用されます。複数行または折り返しのラベルは、フォントサイズを調整しようとはしません。

のドキュメントからminimumFontSize

このプロパティのデフォルト値は0.0です。ラベルのフォント調整を有効にする場合は、常にこの値を増やす必要があります。このプロパティは、numberOfLinesプロパティが1に設定されている場合にのみ有効です。

1つの解決策は、このNSString sizeWithFont:constrainedToSize:lineBreakMode:方法を使用して、ラベルのテキストを割り当てられたスペースに収めるために必要なフォントサイズを計算することです。

編集:何かがうまくいくはずです(これはテストされていません、タイプミスの可能性があります):

NSString *text = @"hello";
UIFont *font = nil;
CGFloat points = 17;
CGFloat maxHeight = infoLabel.frame.size.height;
CGFloat textHeight;
do {
    font = [UIFont systemFontOfSize:points];
    CGSize size = CGSizeMake(infoLabelRect.size.width, 100000);
    CGSize textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode: NSLineBreakByWordWrapping];
    textHeight = textSize.height;
    points -= 1;
} while (textHeight > maxHeight);

infoLabel.font = font;
于 2012-12-02T21:00:11.780 に答える