web-dev-qa-db-fra.com

CGSize sizeWithAttributes dans Swift

En Objective-C, j'ai pu utiliser:

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

Mais dans Swift Langue, je n’ai trouvé aucune solution à cette situation.

De l'aide?

49
Naldo Lopes

Une solution en une seule ligne:

yourLabel.intrinsicContentSize.width pour Objective-C/Swift

Cela fonctionnera même si votre texte d'étiquette a un espacement de texte personnalisé.

6
Alok

ce que j'ai fait est quelque chose comme ça:

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)])
143
holex

Il suffit d'utiliser un casting explicite:

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

Sinon, vous pouvez aussi le combler:
Le pontage n'est plus pris en charge dans les versions ultérieures de Swift.

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

Cette réponse mérite au moins l’être, car elle met en évidence les différences potentielles entre les deux approches.

8
Firo

Vous pouvez également utiliser ce morceau de code, c'est plus facile et vous n'avez pas à créer de nouvelle variable uniquement pour obtenir l'objet NSString:

var stringToCalculateSize:String = "My text"
var stringSize:CGSize = (stringToCalculateSize as NSString).sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14.0)])
3
Baki

Sur xCode 6.3, voici ce que vous devez faire maintenant:

    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)
1
user2962499