NSString字符串基于CGSIZE

时间:2015-04-28 17:48:17

标签: ios nsstring

我有一个很长的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

2 个答案:

答案 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