拟合按钮文本大小以匹配按钮大小

时间:2016-02-16 08:35:42

标签: ios uibutton text-size

此图显示了我想要实现的目标:

enter image description here

我指定2个按钮的宽度,与0.4 * redViewWidth和高度0.8 * redViewheight相同。比我希望文本大小为2行,并尽可能大到仍然适合按钮帧。我使用自定义字体,没有自动布局。令我惊讶的是,这不会发生。文本有两行,但文本字体太大,最终不符合按钮大小。我哪里出错了?

编辑:redView使用autolayout。使用按钮填充redView时使用无。

let font = UIFont(name: "customfont", size: 19)
    button1 = UIButton()
    button2 = UIButton()

    button1.frame = CGRectMake(navigationBarView.frame.width*0.6, navigationBarView.frame.height*0.1, navigationBarView.frame.width*0.4, navigationBarView.frame.height*0.8)
    button2.frame = CGRectMake(navigationBarView.frame.width*0.2, navigationBarView.frame.height*0.1, navigationBarView.frame.width*0.4, navigationBarView.frame.height*0.8)


    button1.setTitle("button2\ntext text text text", forState: UIControlState.Normal)
    button1.titleLabel?.textAlignment = NSTextAlignment.Center
    button1.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
    button1.titleLabel?.font=font
    button1.titleLabel?.adjustsFontSizeToFitWidth=true
    button1.titleLabel?.minimumScaleFactor = 0.1
    button2.setTitle("button1\ntext text text text", forState: UIControlState.Normal)
    button2.titleLabel?.textAlignment = NSTextAlignment.Center
    button2.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
    button2.titleLabel?.font=font
    button2.titleLabel?.adjustsFontSizeToFitWidth=true
    button2.titleLabel?.minimumScaleFactor = 0.1

2 个答案:

答案 0 :(得分:0)

您需要为UILabel指定行数,如下所示:

button1.titleLabel?.numberOfLines = 2
button2.titleLabel?.numberOfLines = 2

编辑: 取自Dynamically changing font size of UILabel 显然,只有当你有一行时,自动调整标签的字体大小才有效。下面的代码将自动调整UILabel的大小,并且应该足够简单以编辑UIButton(但是,这是在Objective-C ...中)。

从iOS7开始,sizeWithFont已弃用。多行情况减少为:

factLabel.numberOfLines = 0;
factLabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize maximumLabelSize = CGSizeMake(factLabel.frame.size.width, CGFLOAT_MAX);
CGSize expectSize = [factLabel sizeThatFits:maximumLabelSize];
factLabel.frame = CGRectMake(factLabel.frame.origin.x, factLabel.frame.origin.y, expectSize.width, expectSize.height);

答案 1 :(得分:0)

我最终得到了类似的东西。它会检查屏幕宽度并相应地指定字体大小。硬编码,但它可以解决问题。

let screenRect = UIScreen.mainScreen().bounds
        let screenWidth = screenRect.size.width;

var fontSize = 15
        if screenWidth>410{
            fontSize = 19
        }else if screenWidth>370{
            fontSize = 17
        }else{
            fontSize = 15

        }
        let font = UIFont(name: "customfont", size: CGFloat(fontSize))