如何在iOS7中使用具有动态文本大小的自定义字体

鲍勃·斯普林

在iOS7中,有新的API用于获取一种字体,该字体会自动调整为用户在其首选项中设置的文本大小。

看起来像这样使用它:

UIFont *myFont = [UIFont fontWithDescriptor:[UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleHeadline] size:0];

现在,您分配给它的任何文本将随着用户更改其系统文本大小设置而在字体大小中上下移动。(请记住听name:UIContentSizeCategoryDidChangeNotification通知并更新您的视图以说明尺寸的变化)。

如何使用带有默认Helvetica-Neue以外的字体的动态文本?

鲍勃·斯普林

在该API的背后,苹果具有某种查找表,该表返回特定的字体系列,大小以及有时返回的符号特征(如粗体)(例如UIFontTextStyleHeadline)和用户喜欢的文本大小。后者是sharedApplication类似这样的字符串

[UIApplication sharedApplication].preferredContentSizeCategory;

(我为Helvetica-Neue记录了所有动态文本大小的所有默认大小/字体/特征)。此后,我们增加了可访问性大小的处理,这一点很重要

因此,您真正要做的就是建立一个类似的查找表。我们的设计师为我创建了一个简单的电子表格:

字体大小查询表

请注意,我们添加了两种样式(标题3和4),以选择8种而不是6种。

然后,您需要将其放在方便的位置,例如上的类别UIFontDescriptor您将希望您的方法返回UIFontDescriptor类似于Apple的API,以便仍然可以轻松地通过符号特征等进行调整。

我的类别如下:

UIFontDescriptor + AvenirNext.h

#import <UIKit/UIKit.h>

extern NSString *const ANUIFontTextStyleCaption3;

@interface UIFontDescriptor (AvenirNext)

+(UIFontDescriptor *)preferredAvenirNextFontDescriptorWithTextStyle:(NSString *)style;

@end

UIFontDescriptor + AvenirNext.m

#import "UIFontDescriptor+AvenirNext.h"

NSString *const ANUIFontTextStyleCaption3 = @"ANUIFontTextStyleCaption3";
NSString *const ANUIFontTextStyleCaption4 = @"ANUIFontTextStyleCaption4";

@implementation UIFontDescriptor (AvenirNext)
+(UIFontDescriptor *)preferredAvenirNextFontDescriptorWithTextStyle:(NSString *)style {
    static dispatch_once_t onceToken;
    static NSDictionary *fontSizeTable;
    dispatch_once(&onceToken, ^{
        fontSizeTable = @{
          UIFontTextStyleHeadline: @{
                                    UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: @26,
                                    UIContentSizeCategoryAccessibilityExtraExtraLarge: @25,
                                    UIContentSizeCategoryAccessibilityExtraLarge: @24,
                                    UIContentSizeCategoryAccessibilityLarge: @24,
                                    UIContentSizeCategoryAccessibilityMedium: @23,
                                    UIContentSizeCategoryExtraExtraExtraLarge: @23,
                                    UIContentSizeCategoryExtraExtraLarge: @22,
                                    UIContentSizeCategoryExtraLarge: @21,
                                    UIContentSizeCategoryLarge: @20,
                                    UIContentSizeCategoryMedium: @19,
                                    UIContentSizeCategorySmall: @18,
                                    UIContentSizeCategoryExtraSmall: @17,},

       UIFontTextStyleSubheadline: @{
                                    UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: @24,
                                    UIContentSizeCategoryAccessibilityExtraExtraLarge: @23,
                                    UIContentSizeCategoryAccessibilityExtraLarge: @22,
                                    UIContentSizeCategoryAccessibilityLarge: @22,
                                    UIContentSizeCategoryAccessibilityMedium: @21,
                                    UIContentSizeCategoryExtraExtraExtraLarge: @21,
                                    UIContentSizeCategoryExtraExtraLarge: @20,
                                    UIContentSizeCategoryExtraLarge: @19,
                                    UIContentSizeCategoryLarge: @18,
                                    UIContentSizeCategoryMedium: @17,
                                    UIContentSizeCategorySmall: @16,
                                    UIContentSizeCategoryExtraSmall: @15,},

              UIFontTextStyleBody: @{
                                    UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: @21,
                                    UIContentSizeCategoryAccessibilityExtraExtraLarge: @20,
                                    UIContentSizeCategoryAccessibilityExtraLarge: @19,
                                    UIContentSizeCategoryAccessibilityLarge: @19,
                                    UIContentSizeCategoryAccessibilityMedium: @18,
                                    UIContentSizeCategoryExtraExtraExtraLarge: @18,
                                    UIContentSizeCategoryExtraExtraLarge: @17,
                                    UIContentSizeCategoryExtraLarge: @16,
                                    UIContentSizeCategoryLarge: @15,
                                    UIContentSizeCategoryMedium: @14,
                                    UIContentSizeCategorySmall: @13,
                                    UIContentSizeCategoryExtraSmall: @12,},
          
          UIFontTextStyleCaption1: @{
                                    UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: @19,
                                    UIContentSizeCategoryAccessibilityExtraExtraLarge: @18,
                                    UIContentSizeCategoryAccessibilityExtraLarge: @17,
                                    UIContentSizeCategoryAccessibilityLarge: @17,
                                    UIContentSizeCategoryAccessibilityMedium: @16,
                                    UIContentSizeCategoryExtraExtraExtraLarge: @16,
                                    UIContentSizeCategoryExtraExtraLarge: @16,
                                    UIContentSizeCategoryExtraLarge: @15,
                                    UIContentSizeCategoryLarge: @14,
                                    UIContentSizeCategoryMedium: @13,
                                    UIContentSizeCategorySmall: @12,
                                    UIContentSizeCategoryExtraSmall: @12,},
          
          UIFontTextStyleCaption2: @{
                                    UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: @18,
                                    UIContentSizeCategoryAccessibilityExtraExtraLarge: @17,
                                    UIContentSizeCategoryAccessibilityExtraLarge: @16,
                                    UIContentSizeCategoryAccessibilityLarge: @16,
                                    UIContentSizeCategoryAccessibilityMedium: @15,
                                    UIContentSizeCategoryExtraExtraExtraLarge: @15,
                                    UIContentSizeCategoryExtraExtraLarge: @14,
                                    UIContentSizeCategoryExtraLarge: @14,
                                    UIContentSizeCategoryLarge: @13,
                                    UIContentSizeCategoryMedium: @12,
                                    UIContentSizeCategorySmall: @12,
                                    UIContentSizeCategoryExtraSmall: @11,},
          
        ANUIFontTextStyleCaption3: @{
                                    UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: @17,
                                    UIContentSizeCategoryAccessibilityExtraExtraLarge: @16,
                                    UIContentSizeCategoryAccessibilityExtraLarge: @15,
                                    UIContentSizeCategoryAccessibilityLarge: @15,
                                    UIContentSizeCategoryAccessibilityMedium: @14,
                                    UIContentSizeCategoryExtraExtraExtraLarge: @14,
                                    UIContentSizeCategoryExtraExtraLarge: @13,
                                    UIContentSizeCategoryExtraLarge: @12,
                                    UIContentSizeCategoryLarge: @12,
                                    UIContentSizeCategoryMedium: @12,
                                    UIContentSizeCategorySmall: @11,
                                    UIContentSizeCategoryExtraSmall: @10,},

          UIFontTextStyleFootnote: @{
                                    UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: @16,
                                    UIContentSizeCategoryAccessibilityExtraExtraLarge: @15,
                                    UIContentSizeCategoryAccessibilityExtraLarge: @14,
                                    UIContentSizeCategoryAccessibilityLarge: @14,
                                    UIContentSizeCategoryAccessibilityMedium: @13,
                                    UIContentSizeCategoryExtraExtraExtraLarge: @13,
                                    UIContentSizeCategoryExtraExtraLarge: @12,
                                    UIContentSizeCategoryExtraLarge: @12,
                                    UIContentSizeCategoryLarge: @11,
                                    UIContentSizeCategoryMedium: @11,
                                    UIContentSizeCategorySmall: @10,
                                    UIContentSizeCategoryExtraSmall: @10,},

          ANUIFontTextStyleCaption4: @{
                                    UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: @15,
                                    UIContentSizeCategoryAccessibilityExtraExtraLarge: @14,
                                    UIContentSizeCategoryAccessibilityExtraLarge: @13,
                                    UIContentSizeCategoryAccessibilityLarge: @13,
                                    UIContentSizeCategoryAccessibilityMedium: @12,
                                    UIContentSizeCategoryExtraExtraExtraLarge: @12,
                                    UIContentSizeCategoryExtraExtraLarge: @11,
                                    UIContentSizeCategoryExtraLarge: @11,
                                    UIContentSizeCategoryLarge: @10,
                                    UIContentSizeCategoryMedium: @10,
                                    UIContentSizeCategorySmall: @9,
                                    UIContentSizeCategoryExtraSmall: @9,},
        };
    });
    
    
    NSString *contentSize = [UIApplication sharedApplication].preferredContentSizeCategory;
    return [UIFontDescriptor fontDescriptorWithName:[self preferredFontName] size:((NSNumber *)fontSizeTable[style][contentSize]).floatValue];
}
+(UIFontDescriptor *)preferredAvenirNextDemiBoldFontDescriptorWithTextStyle:(NSString *)style {
    return [[self preferredAvenirNextFontDescriptorWithTextStyle:style] fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
}

+(UIFontDescriptor *)preferredAvenirNextBoldFontDescriptorWithTextStyle:(NSString *)style {
    return [UIFontDescriptor fontDescriptorWithName:[self preferredBoldFontName] size:[self preferredAvenirNextFontDescriptorWithTextStyle:style].pointSize];
}

+(NSString *)preferredFontName {
    return @"AvenirNext-Medium";
}
+(NSString *)preferredBoldFontName {
    return @"AvenirNext-Bold";
}

@end

我们选择使用相同的基本字体AvenirNext-Medium,然后使用粗体等(通过符号特征),但是您可能会发疯,并根据需要在字体上指定不同的粗细变体作为查找表的一部分,例如AvenirNext-ExtraBold

这里的所有都是它的!我们这样使用它:

[UIFont fontWithDescriptor:[UIFontDescriptor preferredAvenirNextFontDescriptorWithTextStyle:UIFontTextStyleHeadline] size: 0]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Highcharts中使用具有默认打印选项的自定义下载按钮?

来自分类Dev

如何在iOS中使用.ttc自定义字体

来自分类Dev

iOS7 UIDatePicker中的自定义字体

来自分类Dev

如何在iOS故事板上使用自定义字体遵守动态类型辅助功能大小

来自分类Dev

在ios7中使用自定义警报视图的替代方法是什么?

来自分类Dev

无法在iOS7中使用自定义RGBa设置barTintColor

来自分类Dev

如何在iOS7中为后退按钮创建自定义蒙版图像

来自分类Dev

如何在iOS7中为后退按钮创建自定义蒙版图像

来自分类Dev

如何在iOS7中自定义UISearchBar(清除按钮)

来自分类Dev

如何在Xcode中以编程方式在iOS中使用自定义字体(例如:Helvetica CY.ttf)

来自分类Dev

使TextView使用具有不同样式(常规和斜体)的自定义字体

来自分类Dev

使TextView使用具有不同样式(常规和斜体)的自定义字体

来自分类Dev

如何在SublimeText中使用自定义字体

来自分类Dev

如何在网站中使用自定义字体

来自分类Dev

如何在Ghostscript / PostScript中使用自定义字体?

来自分类Dev

如何在iOS标签栏中使用自定义字体

来自分类Dev

自定义URL方案如何与iOS7中的“ UILaunchImages”键一起使用?

来自分类Dev

元帅无法使用具有自定义大小的枚举字段的结构

来自分类Dev

具有自动布局iOS 6和iOS7的MKMapView自定义callOutView

来自分类Dev

使用具有自定义延迟的 javascript 在循环中动态更改包装器背景

来自分类Dev

如何在jQuery mobile 1.4.0中使用自定义字体?

来自分类Dev

在事件中使用具有自定义参数的委托

来自分类Dev

忽略动态类型时,在SwiftUI iOS 13+中修复自定义字体的大小

来自分类Dev

如何在动态编译中使用自定义类

来自分类Dev

如何在Vaadin RichTextArea中添加自定义字体和自定义字体大小

来自分类Dev

如何在Keras中实现具有动态形状的自定义输出层?

来自分类Dev

自定义阿拉伯字体在iOS7中工作,但在iOS6中不工作

来自分类Dev

如何使用 OpenSans 自定义字体在 **Swift 4** 中使文本范围带有下划线和粗体

来自分类Dev

如何在iOS7下自定义MKAnnotationView的calloutAccessoryView?

Related 相关文章

  1. 1

    如何在Highcharts中使用具有默认打印选项的自定义下载按钮?

  2. 2

    如何在iOS中使用.ttc自定义字体

  3. 3

    iOS7 UIDatePicker中的自定义字体

  4. 4

    如何在iOS故事板上使用自定义字体遵守动态类型辅助功能大小

  5. 5

    在ios7中使用自定义警报视图的替代方法是什么?

  6. 6

    无法在iOS7中使用自定义RGBa设置barTintColor

  7. 7

    如何在iOS7中为后退按钮创建自定义蒙版图像

  8. 8

    如何在iOS7中为后退按钮创建自定义蒙版图像

  9. 9

    如何在iOS7中自定义UISearchBar(清除按钮)

  10. 10

    如何在Xcode中以编程方式在iOS中使用自定义字体(例如:Helvetica CY.ttf)

  11. 11

    使TextView使用具有不同样式(常规和斜体)的自定义字体

  12. 12

    使TextView使用具有不同样式(常规和斜体)的自定义字体

  13. 13

    如何在SublimeText中使用自定义字体

  14. 14

    如何在网站中使用自定义字体

  15. 15

    如何在Ghostscript / PostScript中使用自定义字体?

  16. 16

    如何在iOS标签栏中使用自定义字体

  17. 17

    自定义URL方案如何与iOS7中的“ UILaunchImages”键一起使用?

  18. 18

    元帅无法使用具有自定义大小的枚举字段的结构

  19. 19

    具有自动布局iOS 6和iOS7的MKMapView自定义callOutView

  20. 20

    使用具有自定义延迟的 javascript 在循环中动态更改包装器背景

  21. 21

    如何在jQuery mobile 1.4.0中使用自定义字体?

  22. 22

    在事件中使用具有自定义参数的委托

  23. 23

    忽略动态类型时,在SwiftUI iOS 13+中修复自定义字体的大小

  24. 24

    如何在动态编译中使用自定义类

  25. 25

    如何在Vaadin RichTextArea中添加自定义字体和自定义字体大小

  26. 26

    如何在Keras中实现具有动态形状的自定义输出层?

  27. 27

    自定义阿拉伯字体在iOS7中工作,但在iOS6中不工作

  28. 28

    如何使用 OpenSans 自定义字体在 **Swift 4** 中使文本范围带有下划线和粗体

  29. 29

    如何在iOS7下自定义MKAnnotationView的calloutAccessoryView?

热门标签

归档