2015-04-28 3 views
2

У меня длинный NSString и вы хотите получить только строку, которая вписывается в CGSize.Строка NSString на основе CGSIZE

Пример:

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, тогда я бы даже не задал этот вопрос –

Смежные вопросы