问题描述
我想支持 Dynamic Type 但仅限于一定的限制,类似于 Settings.app 中标准 UITableViewCell
可以增长到 UIContentSizeCategoryAccessibilityExtraExtraLarge代码>但不是更大.
I want to support Dynamic Type but only to a certain limit, similar to the Settings.app where standard UITableViewCell
s can grow up to UIContentSizeCategoryAccessibilityExtraExtraLarge
but not larger.
是否有一种简单的方法可以使用标准的 UITableViewCell 样式来完成此操作?
Is there an easy way to accomplish this with standard UITableViewCell styles?
推荐答案
我在 UIFont 上使用自定义类别来获取具有限制的首选字体,就像这样
I'm using a custom category on UIFont to get a preferred font with a limit, like this
extension UIFont {
static func preferredFont(withTextStyle textStyle: UIFont.TextStyle, maxSize: CGFloat) -> UIFont {
// Get the descriptor
let fontDescriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: textStyle)
// Return a font with the minimum size
return UIFont(descriptor: fontDescriptor, size: min(fontDescriptor.pointSize, maxSize))
}
}
对象
@implementation UIFont (preferredFontWithSizeLimit)
+ (UIFont *)preferredFontWithTextStyle:(UIFontTextStyle)style maxSize:(CGFloat)maxSize {
// Get the descriptor
UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle: style];
// Return a font with the minimum size
return [UIFont fontWithDescriptor: fontDescriptor size: MIN(fontDescriptor.pointSize, maxSize)];
}
@end
要根据样式对限制进行硬编码,您可以添加如下内容(我将每种样式的当前系统默认值放在注释中)
To hard-code limits based on the style, you could add something like this (I put the current system default for each style in comments)
+ (UIFont *)limitedPreferredFontForTextStyle:(UIFontTextStyle)style {
// Create a table of size limits once
static NSDictionary *sizeLimitByStyle;
static dispatch_once_t once_token;
dispatch_once(&once_token, ^{
sizeLimitByStyle = @{
UIFontTextStyleTitle1: @56, // default 28
UIFontTextStyleTitle2: @44, // default 22
UIFontTextStyleTitle3: @40, // default 20
UIFontTextStyleHeadline: @34, // default 17
UIFontTextStyleSubheadline: @30, // default 15
UIFontTextStyleBody: @34, // default 17
UIFontTextStyleCallout: @32, // default 16
UIFontTextStyleFootnote: @26, // default 13
UIFontTextStyleCaption1: @24, // default 12
UIFontTextStyleCaption2: @22, // default 11
};
});
// Look up the size limit
CGFloat maxSize = INFINITY;
NSNumber *limit = sizeLimitByStyle[style];
if (limit) {
maxSize = limit.doubleValue;
}
// Return the font
return [UIFont preferredFontWithTextStyle: style maxSize: maxSize];
}
这篇关于限制支持的 Dynamic Type 字体大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!