2015-04-28 65 views
2

我有一個很長的NSString,只想得到適合CGSize的字符串。基於CGSIZE的NSString字符串

實施例:

NSString *temp = @"jump jump jump jump jump jump"; 

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

請忽略的語法。

從上面的細節我可以得到什麼NSString適合CGSize並獲取省略號。

下面的問題只返回尺寸/寬度: iOS 7 sizeWithAttributes: replacement for sizeWithFont:constrainedToSize

+0

的可能重複的[iOS的7 sizeWithAttributes:替代sizeWithFont:constrainedToSize](HTTP:// stackoverflow.com/questions/19145078/ios-7-sizewithattributes-replacement-for-sizewithfontconstrainedtosize) –

+0

可能的重複不會返回截斷的字符串,只是大小。 – picciano

回答

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 
+0

感謝您的答覆。將嘗試並讓你知道。 –

+0

感謝它工作:) –

0

如果你的最終目標是把字符串轉換成一個UILabel具有固定寬度(和我在這裏做一個假設),那麼就分配NSString添加到標籤並讓UILabel處理細節(即文本對齊,基線,換行符等)。

如果沒有,那麼你將不得不遍歷字符串增加它的長度在一個字符時,使用UIStringDrawing方法衡量:

- (CGSize)sizeWithAttributes:(NSDictionary *)attrs 

而且不要忘記來衡量省略號的大小首先並考慮到這一點。

+0

對不起,但我只需要字符串。如果它本來是UILabel,那麼我甚至不會問這個問題 –