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