如何获得一个NSString的大小

一个“quicky”:我怎样才能得到一个NSString的大小(宽度)?

我试图看看是否string的宽度,看看它是否大于给定的宽度的屏幕,在这种情况下,我必须“裁剪”,并附加“…”,得到通常的行为的UILabel。 因为AAAAAAAA和iiiiii具有相同的长度但是不同的大小(例如),string.length将不起作用。

我有点卡住了

非常感谢。

这是一个不同的方法。 找出文本的最小尺寸,以便它不会换行到多行。 如果它换行超过一行,你可以找出使用的高度。

你可以使用这个代码:

CGSize maximumSize = CGSizeMake(300, 9999); NSString *myString = @"This is a long string which wraps"; UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:14]; CGSize myStringSize = [myString sizeWithFont:myFont constrainedToSize:maximumSize lineBreakMode:self.myLabel.lineBreakMode]; 

300是屏幕的宽度,有一点余量空间。 如果您不使用IB,则应该使用自己的值replace字体和大小,并使用lineBreakMode

现在myStringSize会包含一个height ,你可以检查高度,你知道只有一行高(使用相同的字体和大小)。 如果它更大,则需要剪切文本。 请注意,您应该在再次检查之前将…添加到string中(添加…可能会再次超过限制)。

把这段代码放在一个循环中来剪切文本,然后再次检查正确的高度。

使用下面的方法。

Objective-C的

 - (CGSize)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font { CGSize size = CGSizeZero; if (text) { CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil]; size = CGSizeMake(frame.size.width, frame.size.height + 1); } return size; } 

Swift 3.0

 func findHeight(forText text: String, havingWidth widthValue: CGFloat, andFont font: UIFont) -> CGSize { var size = CGSizeZero if text { var frame = text.boundingRect(withSize: CGSize(width: widthValue, height: CGFLOAT_MAX), options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil) size = CGSize(width: frame.size.width, height: frame.size.height + 1) } return size } 

您需要使用Core Graphics来测量以指定的字体和大小呈现的string。 请参阅测量漫游string的像素宽度的答案。

 sizeWithFont:constrainedToSize:lineBreakMode 

已被弃用。 使用下面的代码片段,

 UIFont *font=[UIFont fontWithName:@"Arial" size:16.f]; NSString *name = @"APPLE"; CGSize size = [name sizeWithAttributes:@{NSFontAttributeName:font}];