基于CGSIZE的NSString字符串



我有一个很长的NSString,只想得到适合CGSize的字符串。

例:

NSString *temp = @"jump jump jump jump jump jump";
CGSize = CGSizeMake(30,30);
UIFont *font = [UIFont fontwithName:@"helviticaNueue" fontSize:18];

请忽略语法。

从上面的细节中,我可以得到适合CGSize并得到省略号的内容。

下面的问题只返回大小/宽度:iOS 7 sizeWithAttributes:替换为 sizeWithFont:contrainedToSize

我刚刚将其实现为最近一个项目的NSString类别,似乎工作正常。它目前适用于宽度,但您也应该能够调整它以使用高度。

NSString-Truncate.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface NSString (Truncate)
- (NSString *)stringByTruncatingToWidth:(CGFloat)width attributes:(NSDictionary *)textFontAttributes;
@end

NSString-Truncate.m

#import "NSString+Truncate.h"
@implementation NSString (Truncate)
- (NSString *)stringByTruncatingToWidth:(CGFloat)width attributes:(NSDictionary *)textFontAttributes {
    CGSize size = [self sizeWithAttributes:textFontAttributes];
    if (size.width <= width) {
        return self;
    }
    for (int i = 2; i < self.length; i++) {
        NSString *testString = [NSString stringWithFormat:@"%@…", [self substringToIndex:self.length - i]];
        CGSize size = [testString sizeWithAttributes:textFontAttributes];
        if (size.width <= width) {
            return testString;
        }
    }
    return @"";
}
@end
如果你的

最终目标是将字符串放入具有固定宽度的 UILabel 中(我在这里做一个假设),那么只需将 NSString 分配给标签并让 UILabel 处理细节(即文本对齐、基线、换行符等)。

如果没有,那么你必须迭代字符串,一次增加一个字符的长度,并使用UIStringDrawing方法测量它:

- (CGSize)sizeWithAttributes:(NSDictionary *)attrs

并且不要忘记首先测量省略号的大小并考虑到这一点。

最新更新