Ios 您调用什么方法来获取用户';s首选的文本大小?

Ios 您调用什么方法来获取用户';s首选的文本大小?,ios,Ios,iOS有一个你调用的方法,它会告诉你用户选择的动态类型文本大小(他们在“设置”>“常规”>“文本大小”中设置,有7个从小到大的可能值) 您可以进行一个API调用,它返回描述这七个选项的七个字符串值之一,但我似乎找不到它。我知道它的存在,就像我以前使用过的一样,但我在任何地方都找不到它 注意:我不是在说这种方法: [UIFont preferredFontForTextStyle:UIFontTextStyleBody] 它返回一个UIFont。实际上,似乎就是这个方法,基于: 要利用这些功能,

iOS有一个你调用的方法,它会告诉你用户选择的动态类型文本大小(他们在“设置”>“常规”>“文本大小”中设置,有7个从小到大的可能值)

您可以进行一个API调用,它返回描述这七个选项的七个字符串值之一,但我似乎找不到它。我知道它的存在,就像我以前使用过的一样,但我在任何地方都找不到它

注意:我不是在说这种方法:

[UIFont preferredFontForTextStyle:UIFontTextStyleBody]

它返回一个UIFont。

实际上,似乎就是这个方法,基于:

要利用这些功能,请准备好响应用户更改文本大小设置时发送的通知。然后,使用
UIFont
方法
preferredFontForTextStyle
获取要在UI中使用的新字体。iOS 7优化了此方法指定的字体,以最大限度地提高每个大小的可读性。要了解有关应用程序中的文本样式和字体使用的更多信息,请参阅iOS文本编程指南中的“文本样式”

此外,
+[UIFont preferredFontForTextStyle:][/code>的文档明确指出,它返回“与文本样式关联的字体实例,并根据用户选择的内容大小类别进行适当缩放。”换句话说,返回的
UIFont
已缩放到用户的首选项


您可以使用
-[UIFont pointSize]
UIFont
获取字体大小。找到它,它是
[[UIApplication sharedApplication]preferredContentSizeCategory]
。以下是一些代码,可用于获取此属性并将其转换为您喜欢的任何字体大小:

CGFloat fontSize = 17;
NSString *textSize = [[UIApplication sharedApplication] 
    preferredContentSizeCategory];
if ([textSize isEqualToString:@"UICTContentSizeCategoryXS"]) {
    fontSize = 10;
} else if ([textSize isEqualToString:@"UICTContentSizeCategoryS"]) {
    fontSize = 13;
} else if ([textSize isEqualToString:@"UICTContentSizeCategoryM"]) {
    fontSize = 15;
} else if ([textSize isEqualToString:@"UICTContentSizeCategoryL"]) {
    // "Normal" or middle size - use designed font sizes
    fontSize = 17;
} else if ([textSize isEqualToString:@"UICTContentSizeCategoryXL"]) {
    fontSize = 24;
} else if ([textSize isEqualToString:@"UICTContentSizeCategoryXXL"]) {
    fontSize = 32;
} else if ([textSize isEqualToString:@"UICTContentSizeCategoryXXXL"]) {
    fontSize = 48;
}

回答这个问题有点晚了,但为了完整起见,我想补充一下

以下是关于
preferredContentSizeCategory

下面是定义的内容大小常量的文档

用法示例:

- (void) viewWillAppear:(BOOL)animated {    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didChangePreferredContentSize:)
                                                 name:UIContentSizeCategoryDidChangeNotification
                                               object:nil];
    [self didChangePreferredContentSize: nil];
}

- (void) didChangePreferredContentSize: (NSNotification *) notification {
    CGFloat pointSize = [UIFontDescriptor preferredFontDescriptorWithTextStyle: UIFontTextStyleCaption2].pointSize;
    CGFloat pointSizeForRegularFonts = [UIFontDescriptor preferredFontDescriptorWithTextStyle: UIFontTextStyleSubheadline].pointSize;

    //  NSString *newFontSize = notification.userInfo[UIContentSizeCategoryNewValueKey];

    NSString *newFontSize = [UIApplication sharedApplication].preferredContentSizeCategory;
    if ([newFontSize isEqualToString: UIContentSizeCategoryExtraSmall] ||
        [newFontSize isEqualToString: UIContentSizeCategorySmall] ||
        [newFontSize isEqualToString: UIContentSizeCategoryMedium] ||
        [newFontSize isEqualToString: UIContentSizeCategoryLarge] ||
        [newFontSize isEqualToString: UIContentSizeCategoryAccessibilityMedium] ||
        [newFontSize isEqualToString: UIContentSizeCategoryAccessibilityLarge]) {
        pointSize = pointSizeForRegularFonts;
    }

    [self.descriptionLabel setFont: [UIFont systemFontOfSize: pointSize]];
    [self.button.titleLabel setFont: [UIFont systemFontOfSize: pointSize]];
}

Swift 4:

这就是我用来确定Swift中当前字体类别的方法

 let fontCategory = UIApplication.shared.preferredContentSizeCategory

    switch fontCategory {
    case UIContentSizeCategory.accessibilityExtraExtraExtraLarge:
        print("A_XXXL")
    case UIContentSizeCategory.accessibilityExtraExtraLarge:
        print("A_XXL")
    case UIContentSizeCategory.accessibilityExtraLarge:
        print("A_XL")
    case UIContentSizeCategory.accessibilityLarge:
        print("A_L")
    case UIContentSizeCategory.accessibilityMedium:
        print("A_M")
    case UIContentSizeCategory.extraExtraExtraLarge:
        print("XXXL")
    case UIContentSizeCategory.extraExtraLarge:
        print("XXL")
    case UIContentSizeCategory.extraLarge:
        print("XL")
    case UIContentSizeCategory.large:
        print("L")
    case UIContentSizeCategory.medium:
        print("M")
    case UIContentSizeCategory.small:
            print("S")
    case UIContentSizeCategory.extraSmall:
        print("XS")
    case UIContentSizeCategory.unspecified:
        print("Unspecified")
    default:
        print("Unknown")
    }

不,这是我一直在寻找的方法:
[[UIApplication sharedApplication]preferredContentSizeCategory]
。这些字符串文本(例如UIContentSizeCategoryLarge)实际上有常量。这种方法似乎有些脆弱,因为大小可以从一个版本的iOS任意更改到另一个版本(这以前发生过)@JonTrauntvein:我认为这种方法可以使我的应用程序免受这种任意更改的影响,无论它在技术上是否“脆弱”。我如何才能找到一个数字表示?比如,如果默认值是M,那么L等于M的1.2倍吗?