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

时间:2014-02-28 02:33:52

标签: ios

iOS有一种方法可以告诉您用户选择的动态类型文字大小(他们在设置>常规>文字大小中设置,并且从小到大有7个可能的值)。

您可以进行API调用,返回七个字符串值中的一个来描述这七个选项,但我似乎无法找到它。我知道它存在,因为我以前使用它,但我无法在任何地方找到它。

注意:我谈论这个方法:

[UIFont preferredFontForTextStyle:UIFontTextStyleBody]

返回UIFont。

4 个答案:

答案 0 :(得分:5)

找到它,它是[[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;
}

答案 1 :(得分:1)

实际上,它似乎是基于this page

的方法
  

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

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

您可以使用UIFont-[UIFont pointSize]获取字体大小。

答案 2 :(得分:0)

后来回答了这个问题,但只是想添加一下以保持完整性。

这是preferredContentSizeCategory

上的文档

https://developer.apple.com/documentation/uikit/uiapplication/1623048-preferredcontentsizecategory?language=objc

这是定义内容大小常数的文档

https://developer.apple.com/documentation/uikit/uicontentsizecategory?language=objc

用法示例:

- (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]];
}

答案 3 :(得分:0)

迅速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")
    }