У меня есть UIView, в котором мне нужно рисовать текст в drawRect:
- (void)drawRect:(CGRect)rect {
...
[@"some text" drawAtPoint:somePoint withFont:someFont];
...
}
Поскольку текст требует специального форматирования, я не могу просто использовать UILabel.
Он выглядит нормально, пока я не поверну устройство. Затем размер моего пользовательского UIView изменяется (в методе layoutSubviews
родительского представления), и текст растягивается в одном направлении и сжимается в другом.
Когда я заменяю свое представление на UILabel, текст всегда выглядит великолепно, даже когда границы представления изменяются.
Как я могу заставить свое представление демонстрировать то же поведение, что и UILabel?
Некоторые вещи, которые я изучил, но еще не добился успеха:
- Установите для слоя needDisplayOnBoundsChange представления значение YES.
- Установите для contentStretch представления значение CGRectZero.
- Вызовите setNeedsDisplay в layoutSubviews моего представления.
Может быть, я не делаю одну из этих вещей правильно. Кто-нибудь еще столкнулся с этим?
Обновление: Как рекомендовано в ответе Джеймса Хаддлстона, я установил для свойства contentMode
представления значение UIViewContentModeRedraw
, что частично помогло мне в этом. Текст теперь отображается правильно в конце анимации. Однако в начале анимации текст сжимается/растягивается, чтобы соответствовать конечным размерам, а затем не сжимается/не растягивается в ходе анимации. Это не относится к UILabel.