我在视图控制器中有2个UIButtons,它们具有一定的固定宽度。由于应用程序需要支持多种语言,因此我需要能够调整其字体大小,以便文本始终适合固定的宽度。
但是,当我使用:button.titleLabel?.adjustsFontSizeToFitWidth = true
时,一个按钮的字体大小会比另一个大。
因此,我需要根据宽度的适合度将两种字体大小设置为最小字体大小。
我发现了这个问题但无法将其转换为Swift:Adjust the font size to fit for several UIButton's so that they all have the same font size
我试过了:
func customizeFontSize() {
button1.setTitle("text 1", for: .normal)
button2.setTitle("text 2", for: .normal)
let minFont1: Float = self.idealFontSize(for: button1)
let minFont2: Float = self.idealFontSize(for: button2)
let fontSize: Float = min(minFont1, minFont2)
let tailoredFont = button1.titleLabel!.font.withSize(CGFloat(fontSize))
self.button1.titleLabel!.font = tailoredFont
self.button2.titleLabel!.font = tailoredFont
}
func idealFontSize(for button: UIButton) -> Float {
let label = button.titleLabel!
let temp: Float = 10.0
let width: Float = Float(button.bounds.size.width) - temp
assert(button.bounds.size.width >= label.bounds.size.width)
let actualFontSize: CGFloat
//unavailable in swift
label.text!.size(with: label.font, minFontSize: label.minimumFontSize, actualFontSize: actualFontSize, forWidth: width, lineBreakMode: label.lineBreakMode)
debug("idealFontSizeForButton %f", actualFontSize)
return Float(actualFontSize)
}
非常感谢任何帮助!
答案 0 :(得分:0)
一种可能的解决方案是比较两种字体大小并使用较小的字体。未经测试的例子:
在viewDidLoad
//let button1 = UIButton()
//var button2 = UIButton()
button1.titleLabel?.adjustsFontSizeToFitWidth = true
button2.titleLabel?.adjustsFontSizeToFitWidth = true
在viewDidAppear中:
let size1: CGFloat = (button1.titleLabel?.font.pointSize)!
let size2: CGFloat = (button2.titleLabel?.font.pointSize)!
if size1.isLess(than: size2) {
button2.titleLabel?.font = button1.titleLabel?.font
} else if size2.isLess(than: size1) {
button1.titleLabel?.font = button2.titleLabel?.font
}
答案 1 :(得分:0)
也有同样的问题。找出更好的方法是将按钮置于UIStackView
中,并将其分配模式设置为成比例。这样,如果没有足够的空间来容纳完整尺寸的内容,则每个元素将按比例缩小。
示例代码:
let stackview = UIStackView(arrangedSubviews: [leftButton, rightButton])
stackview.translatesAutoresizingMaskIntoConstraints = false
stackview.spacing = 16
stackview.axis = .horizontal
stackview.distribution = .fillProportionally
stackview.alignment = .center
addSubview(stackview)
stackview.widthAnchor.constraint(lessThanOrEqualToConstant:
UIScreen.main.bounds.width - 80).isActive = true
上面的代码遗漏了两件事:
希望这会有所帮助!