我有一个很长的NSString,并希望只获得适合CGSize的字符串。
示例:
@echo off
setlocal EnableDelayedExpansion
rem Process all text files
for %%f in (*.txt) do (
echo Processing: %%f
rem Copy all but last line in temp.txt file
set "line="
(for /F %%a in (%%f) do (
if defined line echo !line!
set "line=%%a"
)) > temp.txt
rem Overwrite original file
move /Y temp.txt %%f >NUL
rem This for testing
type %%f
)
请忽略语法。
从上面的细节我可以得到NSString适合CGSize并获得省略号。
以下问题仅返回大小/宽度: iOS 7 sizeWithAttributes: replacement for sizeWithFont:constrainedToSize
答案 0 :(得分:0)
如果您的最终目标是将字符串放入具有固定宽度的UILabel(我在这里做出假设),那么只需将NSString分配给标签并让UILabel处理细节(即文本对齐,基线,换行等)。
如果没有,那么你将不得不迭代字符串,一次增加一个字符的长度,并使用UIStringDrawing方法测量它:
- (CGSize)sizeWithAttributes:(NSDictionary *)attrs
不要忘记先测量省略号的大小,并考虑到这一点。
答案 1 :(得分:0)
我刚刚在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