如何计算特定字体和字体大小的文本string的宽度?

我有一个显示一些字符的UILabel。 像“x”,“y”或“rpm”。 我如何计算标签中的文本的宽度(它不是整个可用空间)? 这是用于自动布局,其中另一个视图将具有更大的框架矩形,如果UILabel里面有一个较小的文本。 有没有方法来计算指定UIFont和字体大小的文本的宽度? 也没有换行符,只有一行。

你可以通过NSString UIKit Additions中的各种sizeWithFont:方法来完成。 在你的情况下,最简单的变体就足够了(因为你没有多行标签):

 NSString *someString = @"Hello World"; UIFont *yourFont = // [UIFont ...] CGSize stringBoundingBox = [someString sizeWithFont:yourFont]; 

这种方法有几种变化,例如。 有些考虑换行模式或最大尺寸。

sizeWithFont:现在已被弃用,请使用sizeWithAttributes:相反:

 UIFont *font = [UIFont fontWithName:@"Helvetica" size:30]; NSDictionary *userAttributes = @{NSFontAttributeName: font, NSForegroundColorAttributeName: [UIColor blackColor]}; NSString *text = @"hello"; ... const CGSize textSize = [text sizeWithAttributes: userAttributes]; 

由于sizeWithFont已被弃用,我只是要更新我的原始答案使用Swift 4和.size

  //: Playground - noun: a place where people can play import UIKit if let font = UIFont(name: "Helvetica", size: 24) { let fontAttributes = [NSAttributedStringKey.font: font] let myText = "Your Text Here" let size = (myText as NSString).size(withAttributes: fontAttributes) } 

尺寸应该是“Your Text Here”的屏幕尺寸。

基于Glenn Howes的出色答案 ,我创build了一个扩展来计算string的宽度。 如果您正在设置UISegmentedControl的宽度,可以根据段的标题string设置宽度。

 extension String { func widthOfString(usingFont font: UIFont) -> CGFloat { let fontAttributes = [NSFontAttributeName: font] let size = self.size(attributes: fontAttributes) return size.width } func heightOfString(usingFont font: UIFont) -> CGFloat { let fontAttributes = [NSFontAttributeName: font] let size = self.size(attributes: fontAttributes) return size.height } } 

用法:

  // Set width of segmentedControl let starString = "⭐️" let starWidth = starString.widthOfString(usingFont: UIFont.systemFont(ofSize: 14)) + 16 segmentedController.setWidth(starWidth, forSegmentAt: 3) 

这是迅速2.3版本。 你可以得到string的宽度。

 var sizeOfString = CGSize() if let font = UIFont(name: "Helvetica", size: 14.0) { let finalDate = "Your Text Here" let fontAttributes = [NSFontAttributeName: font] // it says name, but a UIFont works sizeOfString = (finalDate as NSString).sizeWithAttributes(fontAttributes) } 

在Swift中这个简单的扩展运行良好。

 extension String { func size(OfFont font: UIFont) -> CGSize { return (self as NSString).size(attributes: [NSFontAttributeName: font]) } } 

用法:

 let string = "hello world!" let font = UIFont.systemFont(ofSize: 12) let width = string.size(OfFont: font).width // size: {w: 98.912 h: 14.32} 

对于Swift 3.0或Swift 3.0 +

 extension String { func SizeOf_String( font: UIFont) -> CGSize { let fontAttribute = [NSFontAttributeName: font] let size = self.size(attributes: fontAttribute) // for Single Line return size; } } 

使用它喜欢。 ..

  let Str = "ABCDEF" let Font = UIFont.systemFontOfSize(19.0) let SizeOfString = Str.SizeOfString(font: Font!)