如何知道适合固定大小的UILabel的NSString的长度?

Jac*_*ale 10 iphone size nsstring uilabel

我知道NSString有一些方法可以确定它的帧大小,使用NSString UIKit Additions,sizeWithFont ......

反过来怎么样?我的意思是,如果我有一个固定的帧大小,我怎么知道NSString可以容纳多少个字符或单词呢?

如果我知道这一点,我可以轻松切断NSString.

谢谢

Mor*_*ast 7

它可能不是最优雅的解决方案,但你可以这样做:

- (NSString *)string:(NSString *)sourceString reducedToWidth:(CGFloat)width withFont:(UIFont *)font {

    if ([sourceString sizeWithFont:font].width <= width)
        return sourceString;

    NSMutableString *string = [NSMutableString string];

    for (NSInteger i = 0; i < [sourceString length]; i++) {

        [string appendString:[sourceString substringWithRange:NSMakeRange(i, 1)]];

        if ([string sizeWithFont:font].width > width) {

            if ([string length] == 1)
                return nil;

            [string deleteCharactersInRange:NSMakeRange(i, 1)];

            break;
        }
    }

    return string;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样称呼它:

NSString *test = @"Hello, World!";
CGFloat width = 40.0;
UIFont *font = [UIFont systemFontOfSize:[UIFont labelFontSize]];

NSString *reducedString = [self string:test reducedToWidth:width withFont:font];

NSLog(@"%@", reducedString);
Run Code Online (Sandbox Code Playgroud)