CGSize sizeWithAttributes in Swift

前端 未结 6 2178
孤独总比滥情好
孤独总比滥情好 2020-12-24 10:50

In objective-C I was able to use:

    CGSize stringsize =
     [strLocalTelefone sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14.0f]}];
         


        
相关标签:
6条回答
  • 2020-12-24 11:10

    On xCode 8.0, this is what you need to do now: let charSize = string.size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 20)])

    0 讨论(0)
  • 2020-12-24 11:14

    Just one line solution:

    yourLabel.intrinsicContentSize.width for Objective-C / Swift

    This will work even your label text have custom text spacing.

    0 讨论(0)
  • 2020-12-24 11:18

    what I did is something like this:

    swift 5.x

    let myString = "Some text is just here..."
    let size: CGSize = myString.size(withAttributes: [.font: UIFont.systemFont(ofSize: 14)])
    

    swift 4.x

    let myString = "Some text is just here..."
    let size: CGSize = myString.size(withAttributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 14)])
    

    swift 3

    var originalString: String = "Some text is just here..."
    let myString: NSString = originalString as NSString
    let size: CGSize = myString.size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 14.0)])
    

    swift 2.x

    var originalString: String = "Some text is just here..."
    let myString: NSString = originalString as NSString
    let size: CGSize = myString.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14.0)])
    
    0 讨论(0)
  • 2020-12-24 11:23

    You can also use this piece of code, it's easier and you don't have to create new variable just to get NSString object:

    var stringToCalculateSize:String = "My text"
    var stringSize:CGSize = (stringToCalculateSize as NSString).sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14.0)])
    
    0 讨论(0)
  • 2020-12-24 11:30

    On xCode 6.3, this is what you need to do now:

        let font:AnyObject = UIFont(name: "Helvetica Neue", size: 14.0) as! AnyObject
        let name:NSObject = NSFontAttributeName as NSObject
        let dict = [name:font]
        let textSize: CGSize = text.sizeWithAttributes(dict)
    
    0 讨论(0)
  • 2020-12-24 11:34

    Just use explicit casting:

    var stringsize = (strLocalTelefone as NSString).sizeWithAtt...
    

    Otherwise you can bridge it too:
    Bridging is no longer supported in later versions of Swift.

    var strLocalTelefone = "some string"
    var stringsize = strLocalTelefone.bridgeToObjectiveC().sizeWithAttributes([NSFontAttributeName:UIFont.systemFontOfSize(14.0)])
    

    This answer is worth at least looking at, as it highlights potential differences between the two approaches.

    0 讨论(0)
提交回复
热议问题