此图显示了我想要实现的目标:
我指定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
答案 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))