【问题标题】:Autoshrink fontsize of UILabeltext siwftUILabeltext siwft 的自动收缩字体大小
【发布时间】:2021-07-15 02:10:02
【问题描述】:

我有一个多行 UILabel 文本,它根据文本长度动态扩展。我已经在情节提要中设置了正确的自动布局,如果文本很长,我会变得更大。

但是如果是 2 行,我想将字体大小减小到 24,如果是 3 行文本,我想减小到 20。

如果文本是单行,那么字体大小应该是 34。

我尝试了最小字体比例 = 20/34 = .58

但没用。请提出解决方案

【问题讨论】:

标签: swift uilabel font-size multiline autoshrink


【解决方案1】:

您可以使用 switch 语句来确定在更改标签文本后达到一定行数时的字体大小。

使用 https://stackoverflow.com/a/60993649/12783209 中的 actualNumberOfLines() 算法,您可以在必要时重新声明此标签的字体。

func changeFontSizeIfNeeded(on label: inout UILabel){

switch label.actualNumberOfLines{
case 2:
 label.font = label.font.withSize(24)
case 3: 
 label.font = label.font.withSize(20)

default:
//Change this to be the default font size
  label.font = label.font.withSize(30)

}


}

并将此扩展添加到您的项目中:

extension UILabel{

func actualNumberOfLines()-> Int {
        // You have to call layoutIfNeeded() if you are using autoLayout
        self.layoutIfNeeded()

        let myText = self.text! as NSString

        let rect = CGSize(width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude)
        let labelSize = myText.boundingRect(with: rect, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: self.font as Any], context: nil)

        return Int(ceil(CGFloat(labelSize.height) / self.font.lineHeight))
    }

 }

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2023-04-05
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多