子类化 UIFont

bor*_*ero 5 text uifont ios swift ios9

是否可以UIFont使用另一个(或字体描述符)子类化并初始化它?问题是,我无法调用super.init(descriptor:size:)初始化,因为它是一个方便的初始化程序。这样做的目的是更改 和 的属性ascenderdescender覆盖只读属性),因为我只显示数字,并且字母上方和下方有太多空白(我直接在图形上下文中绘制)。如果有另一个优雅的解决方案,那将非常受欢迎。

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

mar*_*rko -2

你所要求的打破了封装,也许也没有意义。

实现此目的的一种更简洁的方法是添加一个类别并提供您自己的便利工厂(例如类)方法,而不是使用继承并进行一些假设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;
}
Run Code Online (Sandbox Code Playgroud)

有一些注意事项:

  • UIFont实际上响应选择器setAscender-setDescender它们隐藏在公共界面上
  • 设置这些属性会对布局产生影响,相反,它不会产生不需要的副作用。
  • 你在黑匣子里摸索,无法保证你所做的事情会起作用,或者会继续起作用。