Подтвердить что ты не робот

CGSize sizeWithAttributes в Swift

В objective-C я смог использовать:

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

Но в Swift Language я не нашел решения для этой ситуации.

Любая помощь?

4b9b3361

Ответ 1

Всего одно решение:

yourLabel.intrinsicContentSize.width для Objective-C/Swift

Это будет работать, даже если текст вашей метки имеет произвольный интервал между текстами.

Ответ 2

что я сделал, это что-то вроде этого:

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

Свифт 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

Просто используйте явное литье:

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

В противном случае вы также можете его соединить:
Bridging больше не поддерживается в более поздних версиях Swift.

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

Этот ответ стоит, по крайней мере, посмотреть, поскольку он подчеркивает потенциальные различия между двумя подходами.

Ответ 4

Вы также можете использовать этот кусок кода, это проще, и вам не нужно создавать новую переменную, чтобы получить объект NSString:

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

Ответ 5

В xCode 6.3 это то, что вам нужно сделать сейчас:

    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

В xCode 8.0 это то, что вам нужно сделать сейчас: let charSize = string.size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 20)])