确定 UILabel 的字体大小或比例
Determine font size or scale of a UILabel
我的 VC 上有一个标签 (titleLabel),动画显示一个接一个字母,直到整个字符串可见。代码如下并且正在运行:
titleLabel.text = ""
titleLabel.alpha = 0
var charIndex = 0.0
let titleText = "Some App Title"
for letter in titleText {
Timer.scheduledTimer(withTimeInterval: (0.1 * charIndex), repeats: false) { (timer) in
self.titleLabel.text?.append(letter)
self.titleLabel.alpha += 0.1
}
charIndex += 1
}
在较小的 iPhone 屏幕上,文本会调整其字体大小以适应动画期间的视图。每次出现最后一个字母时,您都会看到文本变小。
我的 VC 中有一个标签的副本。它不是动画。在通过自动布局调整大小后,我正在寻找一种获取有关此文本标签的信息的方法。我想知道字体大小缩小后的字体大小 and/or 比例。我想使用这些值来设置我的 titleLabel 的相应值,以便它的字体大小在动画期间不会缩小。我还不能以编程方式设置这些属性。
GIF of issue
我怎样才能做到这一点?
您可以根据标签的文字和宽度计算字体大小。
titleLabel.text = ""
titleLabel.alpha = 0
var charIndex = 0.0
let titleText = "Some App Title"
//You can use your custom font here.
titleLabel.font = UIFont.systemFont(ofSize: self.calculateOptimalFontSize(textLength: CGFloat(titleText.count), boundingBox: self.titleLabel.bounds))
for letter in titleText
{
Timer.scheduledTimer(withTimeInterval: (0.1 * charIndex), repeats: false)
{ (timer) in
self.titleLabel.text?.append(letter)
self.titleLabel.alpha += 0.1
}
charIndex += 1
}
您可以创建类似的功能或扩展。
func calculateOptimalFontSize(textLength:CGFloat, boundingBox:CGRect) -> CGFloat
{
let area:CGFloat = boundingBox.width * boundingBox.height
return sqrt(area / textLength)
}
我的 VC 上有一个标签 (titleLabel),动画显示一个接一个字母,直到整个字符串可见。代码如下并且正在运行:
titleLabel.text = ""
titleLabel.alpha = 0
var charIndex = 0.0
let titleText = "Some App Title"
for letter in titleText {
Timer.scheduledTimer(withTimeInterval: (0.1 * charIndex), repeats: false) { (timer) in
self.titleLabel.text?.append(letter)
self.titleLabel.alpha += 0.1
}
charIndex += 1
}
在较小的 iPhone 屏幕上,文本会调整其字体大小以适应动画期间的视图。每次出现最后一个字母时,您都会看到文本变小。
我的 VC 中有一个标签的副本。它不是动画。在通过自动布局调整大小后,我正在寻找一种获取有关此文本标签的信息的方法。我想知道字体大小缩小后的字体大小 and/or 比例。我想使用这些值来设置我的 titleLabel 的相应值,以便它的字体大小在动画期间不会缩小。我还不能以编程方式设置这些属性。
GIF of issue
我怎样才能做到这一点?
您可以根据标签的文字和宽度计算字体大小。
titleLabel.text = ""
titleLabel.alpha = 0
var charIndex = 0.0
let titleText = "Some App Title"
//You can use your custom font here.
titleLabel.font = UIFont.systemFont(ofSize: self.calculateOptimalFontSize(textLength: CGFloat(titleText.count), boundingBox: self.titleLabel.bounds))
for letter in titleText
{
Timer.scheduledTimer(withTimeInterval: (0.1 * charIndex), repeats: false)
{ (timer) in
self.titleLabel.text?.append(letter)
self.titleLabel.alpha += 0.1
}
charIndex += 1
}
您可以创建类似的功能或扩展。
func calculateOptimalFontSize(textLength:CGFloat, boundingBox:CGRect) -> CGFloat
{
let area:CGFloat = boundingBox.width * boundingBox.height
return sqrt(area / textLength)
}