Ios 子类化UIFont

Ios 子类化UIFont,ios,swift,text,ios9,uifont,Ios,Swift,Text,Ios9,Uifont,是否可以将UIFont子类化并用另一个(或字体描述符)初始化它?问题是,我不能调用super.init(描述符:size:)进行初始化,因为它是一个方便的初始化器。这样做的目的是更改递增者和递减者的属性(覆盖只读属性),因为我只显示数字,字母上下有太多空白(我直接在图形上下文中绘制)。当有另一个优雅的解决方案时,它将是非常受欢迎的 我感谢您的帮助,提前谢谢。您所要求的中断封装,可能也没有意义 与其使用继承,而且只需一些假设,实现这一点的更整洁的方法是向UIFont添加一个,并提供自己的便利工厂(

是否可以将
UIFont
子类化并用另一个(或字体描述符)初始化它?问题是,我不能调用
super.init(描述符:size:)
进行初始化,因为它是一个方便的初始化器。这样做的目的是更改
递增者
递减者
的属性(覆盖只读属性),因为我只显示数字,字母上下有太多空白(我直接在图形上下文中绘制)。当有另一个优雅的解决方案时,它将是非常受欢迎的


我感谢您的帮助,提前谢谢。

您所要求的中断封装,可能也没有意义

与其使用继承,而且只需一些假设,实现这一点的更整洁的方法是向
UIFont
添加一个,并提供自己的便利工厂(例如类)方法

有一些警告:

  • UIFont
    实际上响应选择器
    setAscender
    setDecender
    ——它们隐藏在公共界面上
  • 设置这些属性会对布局产生影响,反之,不会产生不必要的副作用
  • 你在一个黑匣子里闲逛,无法保证你所做的事情会有效,或者会继续有效
@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;
}