问题
In objective-C I was able to use:
CGSize stringsize =
[strLocalTelefone sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14.0f]}];
But in Swift Language I didn't found any solution for this situation.
Any Help?
回答1:
Just one line solution:
yourLabel.intrinsicContentSize.width
for Objective-C / Swift
This will work even your label text have custom text spacing.
回答2:
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)])
回答3:
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.
回答4:
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)])
回答5:
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)
回答6:
On xCode 8.0, this is what you need to do now: let charSize = string.size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 20)])
来源:https://stackoverflow.com/questions/24141610/cgsize-sizewithattributes-in-swift