2014-06-08 3 views
24

...NSString boundingRectWithSize: seçenekler: öznitelikler: içerik: Swift'de kullanılamaz? Hatası alıyorum

Could not find an overload for 'init' that accepts the supplied arguments

... Ben kullanmaya çalıştığınızda ...

extension UIFont { 
    func sizeOfString (string: String, constrainedToWidth width: Double) -> CGSize { 
    NSString(string).boundingRectWithSize(CGSize(width, DBL_MAX), 
              options: NSStringDrawingOptions.UsesLineFragmentOrigin, 
              attributes: [NSFontAttributeName: self], 
              context: nil).size 
    } 
} 

NSString artık bu yöntemi desteklemez, yoksa üzerinde berbat ediyorum sözdizimi?

+0

burada görmek, aynı q ham hızlı bir şekilde yutturma: [https://stackoverflow.com/questions/30450434/figure-out-size-of-uilabel-based-on-string-in-swift/30450559#30450559] (https: // stackoverflow .com/question/30450434/shape-out-size-u-dilabel-on-string-in-swift/30450559 # 30450559) – zzycami

cevap

61

Başlatıcılar, adlandırılmış bağımsız değişkenler bekler.

extension UIFont { 
    func sizeOfString (string: String, constrainedToWidth width: Double) -> CGSize { 
     return NSString(string: string).boundingRectWithSize(CGSize(width: width, height: DBL_MAX), 
      options: NSStringDrawingOptions.UsesLineFragmentOrigin, 
      attributes: [NSFontAttributeName: self], 
      context: nil).size 
    } 
} 

Not: String s NSString s dökülebilir.

extension UIFont { 
    func sizeOfString (string: String, constrainedToWidth width: Double) -> CGSize { 
     return NSString(string: string).boundingRect(
      with: CGSize(width: width, height: .greatestFiniteMagnitude), 
      options: .usesLineFragmentOrigin, 
      attributes: [.font: self], 
      context: nil).size 
    } 
} 
+0

Bir demet teşekkürler, Jeffery! Dersimi öğrendim! – aleclarson

+0

Bunu kullantıktan sonra derleme zamanı hatası alıyorum - "UIFont'un bir üye boyutu yokOfString" – Nitesh

+0

@Nitesh "UFont" (sınıf) nesnesine "sizeOfString" göndermeye çalıştığınız anlaşılıyor. Bu yeni yöntem hakkında bilmeyecek, ancak onun örnekleri. Yöntemi bir UIFont örneğine göndermeyi deneyin. Sınıf yöntemleri, bunu yapmak için 'class fund… 'kullanacak olsanız da, uzantılarda da tanımlanabilir. – Patru

4

Alternatif Swift 4 sözdizimi için

GÜNCELLEME

yapabildin -

extension UIFont { 
    func sizeOfString (string: String, constrainedToWidth width: Double) -> CGSize { 
     return (string as NSString).boundingRectWithSize(CGSize(width: width, height: DBL_MAX), 
      options: NSStringDrawingOptions.UsesLineFragmentOrigin, 
      attributes: [NSFontAttributeName: self], 
      context: nil).size 
    } 
} 

veya

extension UIFont { 
    func sizeOfString (string: NSString, constrainedToWidth width: Double) -> CGSize { 
     return string.boundingRectWithSize(CGSize(width: width, height: DBL_MAX), 
      options: NSStringDrawingOptions.UsesLineFragmentOrigin, 
      attributes: [NSFontAttributeName: self], 
      context: nil).size 
    } 
} 

Bir NSString

if let ns_str:NSString = str as NSString? { 

    let sizeOfString = ns_str.boundingRectWithSize(
           CGSizeMake(self.titleLabel.frame.size.width, CGFloat.infinity), 
           options: NSStringDrawingOptions.UsesLineFragmentOrigin, 
           attributes: [NSFontAttributeName: lbl.font], 
           context: nil).size 
} 
0

Sen

let lblRegisterlinkWidth: CGFloat = lblRegisterLink.text!._bridgeToObjectiveC().boundingRectWithSize(lblRegisterLink.frame.size, options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName : lblRegisterLink.font], context: nil).size.width 
4

Son

Swift
func sizeOfString (string: String, constrainedToHeight height: Double) -> CGSize { 
    return NSString(string: string).boundingRect(with: CGSize(width: DBL_MAX, height: height), 
               options: NSStringDrawingOptions.usesLineFragmentOrigin, 
               attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 20)], 
               context: nil).size 
} 
+0

Bunun güncellenmiş bir sürümü için cevabımı görün. – user3246173

1

Son Swift köprüleme nesnel-c kullanabilirsiniz üzerine atacak:

import UIKit 

extension UIFont { 
    func sizeOfString(string: String, constrainedToWidth width: Double) -> CGSize { 
     return NSString(string: string).boundingRect(with: CGSize(width: width, height: .greatestFiniteMagnitude), 
                  options: .usesLineFragmentOrigin, 
                  attributes: [NSFontAttributeName: self], 
                  context: nil).size 
    } 
}