如何获得NSString的大小

cam*_*ilo 31 iphone xcode objective-c width nsstring

"快速":如何获得NSString的大小(宽度)?

我正在尝试查看字符串的字符串宽度是否大于给定的屏幕宽度,我必须"裁剪"它并将其附加到"...",获得通常的行为一个UILabel.string.length不会起作用,因为AAAAAAAA和iiiiii具有相同的长度但不同的大小(例如).

我有点卡住了.

非常感谢.

nev*_*ing 38

这是一种不同的方法.找出文本的最小大小,使其不会换行到多行.如果它包裹超过一行,你可以找到使用高度.

您可以使用此代码:

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];
Run Code Online (Sandbox Code Playgroud)

300是屏幕的宽度,边距有一点空间.你应该用你自己的值替换字体和大小,lineBreakMode如果你没有使用IB.

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

将此代码放在循环中以剪切文本,然后再次检查正确的高度.

  • 对于iOS 7,你应该看看[这个答案](http://stackoverflow.com/a/18951386/3965) (5认同)

Him*_*dia 12

使用以下方法.

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;
}
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)