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

如何获得Swift 4中的文本长度?

  •  2
  • MarkAurelius  · 技术社区  · 8 年前

    func textWidth(text: String, font: UIFont?) -> CGFloat
    {
        let attributes = font?.fontDescriptor.fontAttributes
        return text.size(withAttributes: attributes).width
    }
    

    我不知道他们为什么打破这个,但它不会自动修复。

    3 回复  |  直到 8 年前
        1
  •  6
  •   Avinash Mishra    7 年前

    (SWIFT 4更新)

    func textWidth(text: String, font: UIFont?) -> CGFloat {
        let attributes = font != nil ? [NSFontAttributeName: font] : [:]
        return text.size(withAttributes: attributes).width
    }
    

    希望有帮助。

        2
  •  5
  •   OOPer    8 年前

    我想,你想写这样的东西:

    (Swift 4)

    func textWidth(text: String, font: UIFont?) -> CGFloat {
        let attributes = font != nil ? [NSAttributedStringKey.font: font!] : [:]
        return text.size(withAttributes: attributes).width
    }
    

    (Swift 3)

    func textWidth(text: String, font: UIFont?) -> CGFloat {
        let attributes = font != nil ? [NSFontAttributeName: font!] : [:]
        return text.size(attributes: attributes).width
    }
    

    fontAttributes size(withAttributes:) ( size(attributes:) 在Swift 3)中,即使类型匹配。

        3
  •  0
  •   MarkAurelius    8 年前

    在Swift 4中,另一种方法是避免处理可选项,如下所示:

      extension UIFont { 
    
    
        func textWidth(s: String) -> CGFloat
        {
            return s.size(withAttributes: [NSAttributedStringKey.font: self]).width
        }
    
    }