24

プログラムで UIButton をビューに追加していますが、そのフォント サイズをボタンに自動的にサイズ変更したいです (たとえば、テキストが長い場合は、ボタンに合わせて小さいフォントにサイズ変更します)。

このコードは機能していません (フォントは常に同じです):

myButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
[myButton setTitle:[NSString stringWithFormat:@"hello"] forState:UIControlStateNormal];
[myButton setFrame: CGRectMake(0, 0, 180, 80)];
[myButton.titleLabel setFont: [UIFont boldSystemFontOfSize:16.0]];

myButton.titleLabel.adjustsFontSizeToFitWidth = TRUE;

[theView addSubview:myButton];
4

1 に答える 1

40

コードは機能しますが、おそらく希望どおりには機能しません。このadjustsFontSizeToFitWidthプロパティは、テキストが収まらない場合にのみフォント サイズを縮小します (縮小minimumFontSize)。フォントサイズが大きくなることはありません。この場合、16pt の「hello」は 180pt 幅のボタンに簡単に収まるため、サイズ変更は発生しません。使用可能なスペースに合わせてフォントを大きくしたい場合は、サイズを大きくして、収まる最大サイズに縮小する必要があります。

それが現在どのように機能しているかを示すために、ここに素晴らしい不自然な例があります (フォントが に縮小されているのを見て、ボタンをクリックして幅を縮小しますminimumFontSize):

- (void)viewDidLoad {
    [super viewDidLoad];

    UIButton *myButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
    [myButton setTitle:[NSString stringWithFormat:@"hello"] forState:UIControlStateNormal];
    [myButton setFrame: CGRectMake(10, 10, 300, 120)];
    [myButton.titleLabel setFont: [UIFont boldSystemFontOfSize:100.0]];
    myButton.titleLabel.adjustsFontSizeToFitWidth = YES;
    myButton.titleLabel.minimumFontSize = 40;
    [myButton addTarget:self action:@selector(buttonTap:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:myButton];
}

- (void)buttonTap:(UIButton *)button {
    button.frame = CGRectInset(button.frame, 10, 0);
}
于 2012-08-31T01:15:32.360 に答える