NSString drawAtPoint/drawInRect: добавление к усеченной строке

Я рисую NSString, используя drawAtPoint (drawInRect, это не имеет большого значения). Существует параметр для установки режима разрыва строки, но кто-нибудь знает, как добавить "..." к строкам, если они усечены?

Один из вариантов — проверить, достаточно ли коротка строка. Если это не так, итеративно удаляйте последний символ, пока длина строки + 3 не будет равна максимальной длине.

Я уверен, что есть лучшее решение. У кого-нибудь есть идея?

Лучший,

Генрих


person Erik    schedule 31.08.2009    source источник


Ответы (3)


Вам лучше использовать другой метод NSString:

- (CGSize)drawAtPoint:(CGPoint)point 
             forWidth:(CGFloat)width 
             withFont:(UIFont *)font 
        lineBreakMode:(UILineBreakMode)lineBreakMode

И укажите UILineBreakModeTailTruncation как lineBreakMode.

person Valerii Hiora    schedule 01.09.2009
comment
В чем разница для lineBreakMode между двумя методами? - person pablasso; 23.04.2012

Обновление ответа с drawAtPoint:forWidth:withFont:lineBreakMode: устарело с iOS 7.0. Вместо этого теперь вы можете использовать drawInRect:withAttributes:

NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail; NSDictionary *textAttributes = @{NSFontAttributeName : [UIFont systemFontOfSize:20.0f], NSParagraphStyleAttributeName : paragraphStyle}; [text drawInRect:textRect withAttributes:textAttributes];

person Toland Hon    schedule 21.03.2016

Вы можете использовать опцию NSStringDrawingTruncatesLastVisibleLine со значением NSStringDrawingUsesLineFragmentOrigin.

[_text drawWithRect:_textRect options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine attributes:attributes context:nil];
person pikachu    schedule 17.11.2015