Objective-C - текстовая линия в левом нижнем углу
При рисовании строки в IOS по умолчанию текст выравнивается по левому верхнему углу. Это может вызвать проблемы при использовании нескольких строк с разными размерами шрифта с одинаковыми координатами y.
Вопрос;
Как сделать базовую строку в левом нижнем углу первого ряда.
Как мне этого добиться?
Br,
Тим
2 ответа
Я наконец нашел решение своей проблемы.
Вычитая свойство ascender UIFont из rect.origin.y, я могу расположить текст в нижнем левом углу.
Ссылаясь на документацию UIFont свойства ascender:
"Верхняя y-координата, смещенная от базовой линии, самого длинного восходящего элемента получателя". https://developer.apple.com/library/ios/documentation/uikit/reference/UIFont_Class/Reference/Reference.html
- (void)drawTextBaseLined:(NSString *)text
rect:(CGRect)rect
font:(UIFont *)font
{
if ([text length] == 0) return false;
NSDictionary *attributes = @{NSFontAttributeName : font};
rect.origin.y -= font.ascender;
[text drawWithRect:rect
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];
}
Этот метод будет работать с одной или несколькими строками текста и с разными размерами шрифта. Я надеюсь, что мое решение поможет кому-то еще.
Br,
Тим
Использование - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context;
Когда у вас есть высота вашего ярлыка, просто сделайте математику, чтобы выбрать его правильное начало, чтобы нижний левый угол всегда был в одном и том же месте.
NSDictionary * attributes = @{NSFontAttributeName:[UIFont systemFont]};
CGRect rect = [[NSString string] boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];
Если вы хотите, чтобы ваша метка ниже левого угла всегда была на 50 пикселей, то источник вашей метки будет в (50 - rect.size.height).
Измените размер, чтобы приспособиться к вашим ограничениям.