我有一个很长的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
并且不要忘记首先测量省略号的大小并考虑到这一点。