Подтвердить что ты не робот

UIButton не изменяет размер автоматически

Я программно добавляю 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];
4b9b3361

Ответ 1

Код работает, но, возможно, не так, как вы этого хотите. Свойство adjustsFontSizeToFitWidth только уменьшает размер шрифта, если текст не подходит (вплоть до minimumFontSize). Он никогда не увеличит размер шрифта. В этом случае 16-сантиметровое "привет" легко впишется в кнопку шириной 180 пикселей, так что изменение размера не произойдет. Если вы хотите, чтобы шрифт увеличивался в соответствии с доступным пространством, вы должны увеличить его до большого количества, чтобы он был уменьшен до максимального размера, который подходит.

Просто для того, чтобы показать, как он работает в настоящий момент, вот хороший надуманный пример (нажмите на кнопку, чтобы уменьшить ее ширину, чтобы уменьшить шрифт до 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);
}