简体   繁体   English

调整字体大小以适合多个UIButton,以使它们都具有相同的字体大小

[英]Adjust the font size to fit for several UIButton's so that they all have the same font size

I have several UIButton 's together, and I want to adjust the font size so that it fits. 我有几个UIButton ,并且我想调整字体大小以适合它。 However, each button should use the same font size so that they look the same. 但是,每个按钮应使用相同的字体大小,以使它们看起来相同。 In other words, what I would like to do is set all button to the same minimum size. 换句话说,我想将所有按钮设置为相同的最小尺寸。

_button1.titleLabel.adjustsFontSizeToFitWidth = YES;
_button2.titleLabel.adjustsFontSizeToFitWidth = YES;
float minFont1 = _button1.titleLabel.font.pointSize;
float minFont2 = _button2.titleLabel.font.pointSize;
float fontSize = MIN(minFont1, minFont2);
UIFont *tailoredFont = [_button1.titleLabel.font fontWithSize:fontSize];
_button1.titleLabel.font = tailoredFont;
_button2.titleLabel.font = tailoredFont;

However, this does not work because the titleLabel.font does not reflect the true size of the font. 但是,这不起作用,因为titleLabel.font不能反映字体的真实大小。

The approach I ended up taking is to figure out the ideal font size for each button, and then setting all of the buttons to the smallest of the sizes. 我最终采用的方法是找出每个按钮的理想字体大小,然后将所有按钮设置为最小字体。

- (float)idealFontSizeForButton:(UIButton *)button
{
    UILabel *label = button.titleLabel;
    float width = button.bounds.size.width - 10;
    assert(button.bounds.size.width >= label.bounds.size.width);
    CGFloat actualFontSize;
    [label.text sizeWithFont:label.font
                minFontSize:label.minimumFontSize
             actualFontSize:&actualFontSize
                   forWidth:width
              lineBreakMode:label.lineBreakMode];
    debug(@"idealFontSizeForButton %f", actualFontSize);
    return actualFontSize;
}

.... ....

// Set text and make sure both buttons have the same font size
[_button1 setTitle:title1 forState:UIControlStateNormal];
[_button2 setTitle:title2 forState:UIControlStateNormal];
float minFont1 = [self idealFontSizeForButton:_button1];
float minFont2 = [self idealFontSizeForButton:_button2];
float fontSize = MIN(minFont1, minFont2);
UIFont *tailoredFont = [_button1.titleLabel.font fontWithSize:fontSize];
_button1.titleLabel.font = tailoredFont;
_button2.titleLabel.font = tailoredFont;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM