Подкласс UIFont
Можно ли подкласс UIFont
и инициализировать его другим (или дескриптором шрифта)? Проблема в том, что я не могу позвонить super.init(descriptor:size:)
для инициализации, потому что это удобный инициализатор. Цель этого состоит в том, чтобы изменить атрибуты для ascender
а также descender
(переопределить свойства только для чтения) из-за того, что я отображаю только цифры и слишком много пробелов выше и ниже букв (которые я рисую непосредственно в графическом контексте). Когда есть другое элегантное решение, это было бы очень кстати.
Я ценю вашу помощь, заранее спасибо.
1 ответ
То, что вы просите для инкапсуляции разрывов, и, возможно, также не имеет смысла.
Вместо использования наследования и с некоторыми допущениями, более аккуратным способом достижения этой цели будет добавление категории к UIFont
и предоставьте свой собственный метод фабрики удобства (например, класс).
@interface UIFont (MyUIFont)
@property (assign) CGFloat ascender;
@property (assign) CGFloat descender;
+(instancetype) UIFontWithLessSpacing;
@end
@implementation UIFont (MyUIFont)
+(instancetype) UIFontWithLessSpacing
{
UIFont *font = [UIFontWIthName:@"MyFont" size:12.0f];
font.ascender = 0.0;
font.descender = 0.0;
return font;
}
Есть предостережения:
- Тот
UIFont
на самом деле реагирует на селекторыsetAscender
а такжеsetDescender
- они скрыты в общедоступном интерфейсе - Настройка этих свойств влияет на макет и, наоборот, не имеет нежелательных побочных эффектов.
- Вы ковыряетесь в черном ящике без каких-либо гарантий того, что то, что вы делаете, будет работать или продолжит работать.