Выровнять текст с помощью drawInRect: withAttributes:
В версии моего приложения iOS 5 у меня было:
[self.text drawInRect: stringRect
withFont: [UIFont fontWithName: @"Courier" size: kCellFontSize]
lineBreakMode: NSLineBreakByTruncatingTail
alignment: NSTextAlignmentRight];
Я обновляюсь для iOS 7. Вышеупомянутый метод устарел. Теперь я использую drawInRect: withAttributes:. Параметр атрибутов является объектом NSDictionary. Я могу получить drawInRect: withAttributes: работать для прежнего параметра шрифта, используя это:
UIFont *font = [UIFont fontWithName: @"Courier" size: kCellFontSize];
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: font, NSFontAttributeName,
nil];
[self.text drawInRect: stringRect
withAttributes: dictionary];
Какие пары ключевого значения я добавляю в словарь для получения NSLineBreakByTruncatingTail и NSTextAlignmentRight?
Ответы
Ответ 1
Существует один ключ для установки стиля абзаца текста (включая режим прерывания строки, выравнивание текста и т.д.).
Из docs:
NSParagraphStyleAttributeName
Значение этого атрибута - это объект NSParagraphStyle
. Используйте этот атрибут для применения нескольких атрибутов к диапазону текста. Если этот атрибут не указан, строка использует атрибуты абзаца по умолчанию, возвращаемые методом defaultParagraphStyle
NSParagraphStyle
.
Итак, вы можете попробовать следующее:
UIFont *font = [UIFont fontWithName:@"Courier" size:kCellFontSize];
/// Make a copy of the default paragraph style
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
/// Set line break mode
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
/// Set text alignment
paragraphStyle.alignment = NSTextAlignmentRight;
NSDictionary *attributes = @{ NSFontAttributeName: font,
NSParagraphStyleAttributeName: paragraphStyle };
[text drawInRect:rect withAttributes:attributes];
Ответ 2
Код идет следующим образом:
CGRect textRect = CGRectMake(x, y, length-x, maxFontSize);
UIFont *font = [UIFont fontWithName:@"Courier" size:maxFontSize];
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
paragraphStyle.alignment = NSTextAlignmentRight;
NSDictionary *attributes = @{ NSFontAttributeName: font,
NSParagraphStyleAttributeName: paragraphStyle,
NSForegroundColorAttributeName: [UIColor whiteColor]};
[text drawInRect:textRect withAttributes:attributes];