web-dev-qa-db-ja.com

CGSize sizeWithAttributes in Swift

Objective-Cでは、次を使用できました。

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

しかし、Swift Languageでは、この状況に対する解決策は見つかりませんでした。

ヘルプはありますか?

49
Naldo Lopes

たった1行のソリューション:

yourLabel.intrinsicContentSize.width Objective-C/Swiftの場合

これは、ラベルテキストにカスタムテキスト間隔がある場合でも機能します。

6
Alok

私がしたことは次のようなものです:

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

明示的なキャストを使用するだけです:

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

そうでなければ、あなたもそれを橋渡しすることができます:
ブリッジは、Swiftの以降のバージョンではサポートされなくなりました。

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

この回答 は、少なくとも2つのアプローチの潜在的な違いを強調しているため、見てみる価値があります。

8
Firo

このコードを使用することもできます。簡単であり、NSStringオブジェクトを取得するためだけに新しい変数を作成する必要はありません。

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

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