У меня есть функция секундомера в моем приложении, которая использует центрированный атрибут UILabel
с пропорционально распределенным шрифтом для визуализации времени. При каждом приращении ширина метки меняется, создавая эффект подпрыгивания, который особенно плохо выглядит на быстрых скоростях. Вот пример .
Как я могу это исправить?
iOS 9 UPDATE
Теперь это однострочный:
UIFont.monospacedDigitSystemFontOfSize(17, weight: UIFontWeightRegular)
Кроме того, в прошлый раз, когда я попытался, решение, приведенное ниже, не работало для iOS 9. Довольно много времени отлаживалось, прежде чем наткнуться на это в заголовке.
Решение
Оказалось, что это тривиально с Text Kit в iOS 7.
Убедитесь, что основной текст импортирован:
#import <CoreText/CoreText.h>
Создайте параметр, который преобразует пропорциональные числа в моноширинный:
NSArray *monospacedSetting = @[@{UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType),
UIFontFeatureSelectorIdentifierKey: @(kMonospacedNumbersSelector)}];
Создайте новый дескриптор шрифта, добавив текущий, используемый UILabel
:
UIFontDescriptor *newDescriptor = [[timeLabel.font fontDescriptor] fontDescriptorByAddingAttributes:@{UIFontDescriptorFeatureSettingsAttribute: monospacedSetting}];
Обновить шрифт метки:
// Size 0 to use previously set font size
timeLabel.font = [UIFont fontWithDescriptor:newDescriptor size:0];