代码之家  ›  专栏  ›  技术社区  ›  Trev14

adjustsFontSizeToFitWidth的意外行为

  •  1
  • Trev14  · 技术社区  · 6 年前

    我想知道为什么我的UILabel在 numberOfLines 设置为1。我用下面的代码设置了一个游乐场:

    import UIKit
    import PlaygroundSupport
    
    let labelFrame = CGRect(x: 0, y: 0, width: 100, height: 100)
    let label = UILabel(frame: labelFrame)
    label.backgroundColor = .lightGray
    label.text = "Something that's pretty long"
    
    label.baselineAdjustment = .alignCenters
    label.adjustsFontSizeToFitWidth = true
    
    label.numberOfLines = 1
    label.minimumScaleFactor = 0.1
    
    let frame = CGRect(x: 0, y: 0, width: 300, height: 300)
    let view = UIView(frame: frame)
    view.backgroundColor = .white
    
    view.addSubview(label)
    
    PlaygroundPage.current.liveView = view
    

    这就是结果 No font shrinking

    但是,当我改变 生产线数量

    import UIKit
    import PlaygroundSupport
    
    let labelFrame = CGRect(x: 0, y: 0, width: 100, height: 100)
    let label = UILabel(frame: labelFrame)
    label.backgroundColor = .lightGray
    label.text = "Something that's pretty long"
    
    label.baselineAdjustment = .alignCenters
    label.adjustsFontSizeToFitWidth = true
    
    label.numberOfLines = 2   // <<<<<< this is the only change
    label.minimumScaleFactor = 0.1
    
    let frame = CGRect(x: 0, y: 0, width: 300, height: 300)
    let view = UIView(frame: frame)
    view.backgroundColor = .white
    
    view.addSubview(label)
    
    PlaygroundPage.current.liveView = view
    

    结果如下: enter image description here

    这是怎么回事?这是虫子还是我做错了什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Trev14    6 年前

    label.lineBreakMode = .byTruncatingMiddle
    

    一切正常。实际上,任何一项工作:

    label.lineBreakMode = .byCharWrapping
    label.lineBreakMode = .byClipping
    label.lineBreakMode = .byTruncatingHead
    label.lineBreakMode = .byTruncatingMiddle
    label.lineBreakMode = .byWordWrapping
    

    不起作用的(也是默认值)是

    label.lineBreakMode = .byTruncatingTail
    

    当我在一个真实的模拟器上尝试这个时,一切看起来都很好,所以我想我只是遇到了一个游乐场的虫子。