基于 CGSIZE 的 NSString 字符串
NSString string based on CGSIZE
我有一个很长的 NSString 并且只想获取适合 CGSize 的字符串。
示例:
NSString *temp = @"jump jump jump jump jump jump";
CGSize = CGSizeMake(30,30);
UIFont *font = [UIFont fontwithName:@"helviticaNueue" fontSize:18];
请忽略语法。
从上面的细节我可以得到什么 NSString 适合 CGSize 并得到省略号。
以下问题仅returnsize/width:
iOS 7 sizeWithAttributes: replacement for sizeWithFont:constrainedToSize
如果您的最终目标是将字符串放入具有固定宽度的 UILabel 中(我在这里做一个假设),那么只需将 NSString 分配给标签并让 UILabel 处理细节(即文本对齐、基线、换行符等)。
如果不是,那么您将不得不遍历字符串,每次增加一个字符的长度,并使用 UIStringDrawing 方法对其进行测量:
- (CGSize)sizeWithAttributes:(NSDictionary *)attrs
并且不要忘记先测量省略号的大小并将其考虑在内。
我刚刚在 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
我有一个很长的 NSString 并且只想获取适合 CGSize 的字符串。
示例:
NSString *temp = @"jump jump jump jump jump jump";
CGSize = CGSizeMake(30,30);
UIFont *font = [UIFont fontwithName:@"helviticaNueue" fontSize:18];
请忽略语法。
从上面的细节我可以得到什么 NSString 适合 CGSize 并得到省略号。
以下问题仅returnsize/width: iOS 7 sizeWithAttributes: replacement for sizeWithFont:constrainedToSize
如果您的最终目标是将字符串放入具有固定宽度的 UILabel 中(我在这里做一个假设),那么只需将 NSString 分配给标签并让 UILabel 处理细节(即文本对齐、基线、换行符等)。
如果不是,那么您将不得不遍历字符串,每次增加一个字符的长度,并使用 UIStringDrawing 方法对其进行测量:
- (CGSize)sizeWithAttributes:(NSDictionary *)attrs
并且不要忘记先测量省略号的大小并将其考虑在内。
我刚刚在 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