我有方形按钮,无论是否在iPad或iPhone上显示,其大小都会有所不同。 我希望按钮标题的字体可以调整为按钮的大小,即。这样他们在较大的iPad屏幕上看起来不会太小,或者在较小的iPhone屏幕上看起来太大。
我提出了以下解决方案:
// Buttons is an outlet collection
for button in Buttons {
button.titleLabel?.adjustsFontSizeToFitWidth = true
button.titleEdgeInsets = UIEdgeInsetsMake(button.frame.height/3, button.frame.width/3, button.frame.height/3, button.frame.width/3)
button.titleLabel!.numberOfLines = 1
button.titleLabel!.minimumScaleFactor = 0.1
button.clipsToBounds = true
button.titleLabel?.baselineAdjustment = UIBaselineAdjustment.alignCenters
print(button.titleLabel!.font.pointSize)
}
这可以根据标题的宽度调整字体大小。因此,标题较短的按钮比标题较长的按钮具有更大的字体。
我想要所有按钮的字体大小相同,所以我想访问其中一个按钮的调整大小(让我们说最小的)将其设置为所有按钮。我怎么能这样做?
或者我想将字体调整为按钮高度而不是宽度,但无法找到有效的解决方案。
答案 0 :(得分:1)
这是我在swift 4中的解决方案:
private func adjustedFontSizeOf(label: UILabel) -> CGFloat {
guard let textSize = label.text?.size(withAttributes: [.font: label.font]), textSize.width > label.bounds.width else {
return label.font.pointSize
}
let scale = label.bounds.width / textSize.width
let actualFontSize = scale * label.font.pointSize
return actualFontSize
}
希望它有所帮助。
答案 1 :(得分:0)
这是一个将所有按钮的字体大小设置为最小尺寸(其中)的解决方案。
第1步。我已经初步化了一些新按钮,用于测试:
<table>
<tr>
<td class="line1">line 1</td>
<td class="line1">line 1</td>
<td class="line1">line 1</td>
<td class="line1">line 1</td>
<td class="line2">line 2</td>
<td class="line3">line 3</td>
</tr>
</table>
第2步。然后,我添加了一个名为let button = UIButton()
button.titleLabel!.font = UIFont(name: "Helvetica", size: 20)
let button2 = UIButton()
button2.titleLabel!.font = UIFont(name: "Helvetica", size: 16)
let button3 = UIButton()
button3.titleLabel!.font = UIFont(name: "Helvetica", size: 19)
let Buttons = [button, button2, button3]
的变量,并且我使用大于几乎任何可能的按钮字体大小100的值初始化它,如下所示:
min
第3步。之后,我在循环中添加了更多代码:
var min = CGFloat(Int.max)
因此您的代码将如下所示:
for btn in Buttons{
// here goes your code for your buttons(the code from the question)
// then my code:
if (btn.titleLabel?.font.pointSize)! < min{
min = (btn.titleLabel?.font.pointSize)! // to get the minimum font size of any of the buttons
}
}
print(min) // prints 16, which is correct amongst the value [20,19,16]
第4步。将所有按钮的字体大小设置为for btn in Buttons{
btn.titleLabel?.adjustsFontSizeToFitWidth = true
btn.titleEdgeInsets = UIEdgeInsetsMake(btn.frame.height/3, btn.frame.width/3, btn.frame.height/3, btn.frame.width/3)
btn.titleLabel!.numberOfLines = 1
btn.titleLabel!.minimumScaleFactor = 0.1
btn.clipsToBounds = true
btn.titleLabel?.baselineAdjustment = UIBaselineAdjustment.alignCenters
print(btn.titleLabel!.font.pointSize)
if (btn.titleLabel?.font.pointSize)! < min{
min = (btn.titleLabel?.font.pointSize)! // to get the minimum font size of any of the buttons
}
}
:
min
或强>
Buttons.map { $0.titleLabel?.font = UIFont(name:($0.titleLabel?.font.fontName)! , size: min) }
如果你的最小字体大小是...... 15 ,那么所有按钮的字体大小将变为 15 。
就是这样。希望它有所帮助!
答案 2 :(得分:0)
这与 Swift 5 对我有用,希望对您有所帮助。
func adjustedFontSizeOf(label: UILabel, sizeBounds: CGSize) -> CGFloat {
// return the real pointSize for a label with adjustsFontSizeToFitWidth activated
// sizeBounds is the frame size where the label is enclosed (UIButton frame or similar)
// because label.frame or label.bounds is always CGRect.zero
let textSize = label.intrinsicContentSize
var actualFontSize = label.font.pointSize
if textSize.width > sizeBounds.width { // otherwise is not adjusted
let scale = sizeBounds.width / textSize.width
actualFontSize = scale * label.font.pointSize
}
return actualFontSize
}
func setButtonsToTheSameFontSize(buttons: [UIButton], maxPointSize: CGFloat)
{
// set a list of buttons whose titleLabels have adjustFontSizeToFitWidth activated
// to the same font pointSize using the minimum size among them
var fsize: CGFloat = maxPointSize
for b in buttons {
let f = adjustedFontSizeOf(label: b.titleLabel!, sizeBounds: b.frame.size)
if f < fsize { fsize = f }
}
for b in buttons { b.titleLabel?.font = b.titleLabel?.font.withSize(fsize) }
}