NSString其實也有內建提供這個方法
以下是Objective-C的範例:
+ (CGSize)getSizeFromString:(NSString*)str withFont:(UIFont*)font{ return [str sizeWithAttributes:@{ NSFontAttributeName : font }]; }
這個method只要輸入NSString和UIFont,就可以得到String的尺吋(以CGSize回傳,有該String將要顯示的width或是height)
而Swift要測量的話,要先轉成NSString,且AttributteName也有所修改
如下
func getSizeFromString(string:String, withFont font:UIFont)->CGSize{ let textSize = NSString(string: string ?? "").sizeWithAttributes( [ NSFontAttributeName:font ]) return textSize }
應用上來說可以
var textSize = getSizeFromString(label.text! , withFont: label.font)
然後從 textSize.width 測量出即將顯示的文字長度
這在一些UI的編排或是計算上是滿有用的
另外此方法UILabel的Size To Fit比較字串的長度其實是差不多的
如下範例(使用Swift為例):
label.backgroundColor = UIColor.lightGrayColor() label.numberOfLines = 0 label.lineBreakMode = NSLineBreakMode.ByClipping label.text = "中文中文56789 a123456789 a123456789 a123456789" label.frame = CGRectMake(20, 20, 2000, 200) label.sizeToFit() // 使用和label相同的文字(text)和字體(font) 給swift的範例 var textSize = getSizeFromString(label.text! , withFont: label.font) NSLog("here is swift string width:%f", textSize.width) // 這是 ObjC的測量文字範例 (get text length or width ) textSize = OBJCViewController.getSizeFromString(label.text!, withFont: label.font) NSLog("here is objc string width:%f", textSize.width) NSLog("here is label width:%f", label.frame.size.width)
XCode輸出的結果如下:
2015-09-22 01:23:46.728 test20150922[2432:48542] here is swift string width:423.007812 2015-09-22 01:23:46.729 test20150922[2432:48542] here is objc string width:423.007812 2015-09-22 01:23:46.729 test20150922[2432:48542] here is label width:423.500000
沒有留言:
張貼留言