【问题标题】:Subclassing UIFont子类化 UIFont
【发布时间】:2015-12-22 16:16:21
【问题描述】:

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

感谢您的帮助,在此先感谢。

【问题讨论】:

    标签: ios swift text ios9 uifont


    【解决方案1】:

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

    与其使用继承,而且有一些假设,实现这一点的更简洁的方法是将category 添加到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 实际上响应选择器 setAscendersetDescender - 它们隐藏在公共界面上
    • 设置这些属性会对布局产生影响,相反不会产生不必要的副作用。
    • 您在黑匣子中四处游荡,无法保证您所做的事情会奏效,或者会继续奏效。

    【讨论】:

      猜你喜欢
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 2015-11-09
      • 2011-11-30
      • 1970-01-01
      相关资源
      最近更新 更多