如何计算特定字体和字体大小的文本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!)