ios - teclado - fuentes html para web
Cómo usar una fuente personalizada con tamaños de texto dinámicos en iOS7 (11)
En iOS7 hay nuevas API para obtener una fuente que se ajusta automáticamente al tamaño de texto que el usuario ha establecido en sus preferencias.
Se ve algo así para usarlo:
UIFont *myFont = [UIFont fontWithDescriptor:[UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleHeadline] size:0];
Ahora, cualquier texto al que le asigne esto se moverá hacia arriba y hacia abajo en el tamaño de la fuente a medida que el usuario cambie la configuración del tamaño del texto del sistema. (Recuerde escuchar el name:UIContentSizeCategoryDidChangeNotification
notificación y actualice su vista para dar cuenta del cambio de tamaño).
¿Cómo uso el texto dinámico con una fuente que no sea la Helvetica-Neue predeterminada?
@Bob Spryn código reescrito con swift:
import UIKit
extension UIFontDescriptor {
private struct SubStruct {
static var preferredFontName: NSString = "OEMeodedPashutPro-Regular"
}
class func preferredDescriptor(textStyle: NSString) -> UIFontDescriptor {
struct Static {
static var onceToken : dispatch_once_t = 0
static var fontSizeTable : NSDictionary = NSDictionary()
}
dispatch_once(&Static.onceToken) {
Static.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
],
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
],
]
}
let contentSize = UIApplication.sharedApplication().preferredContentSizeCategory
let style = Static.fontSizeTable[textStyle] as NSDictionary
return UIFontDescriptor(name: SubStruct.preferredFontName, size: CGFloat((style[contentSize] as NSNumber).floatValue))
}
}
Uso:
UIFont(descriptor: UIFontDescriptor.preferredDescriptor(UIFontTextStyleBody), size: 0)
Aquí está mi opinión sobre la respuesta de @Gobe, en Swift 3:
extension UIFontDescriptor {
@nonobjc static var fontSizeTable: [UIFontTextStyle : [UIContentSizeCategory : CGFloat]] = {
return [
.headline: [
.accessibilityExtraExtraExtraLarge: 23,
.accessibilityExtraExtraLarge: 23,
.accessibilityExtraLarge: 23,
.accessibilityLarge: 23,
.accessibilityMedium: 23,
.extraExtraExtraLarge: 23,
.extraExtraLarge: 21,
.extraLarge: 19,
.large: 17,
.medium: 16,
.small: 15,
.extraSmall: 14],
.subheadline: [
.accessibilityExtraExtraExtraLarge: 21,
.accessibilityExtraExtraLarge: 21,
.accessibilityExtraLarge: 21,
.accessibilityLarge: 21,
.accessibilityMedium: 21,
.extraExtraExtraLarge: 21,
.extraExtraLarge: 19,
.extraLarge: 17,
.large: 15,
.medium: 14,
.small: 13,
.extraSmall: 12],
.body: [
.accessibilityExtraExtraExtraLarge: 53,
.accessibilityExtraExtraLarge: 47,
.accessibilityExtraLarge: 40,
.accessibilityLarge: 33,
.accessibilityMedium: 28,
.extraExtraExtraLarge: 23,
.extraExtraLarge: 21,
.extraLarge: 19,
.large: 17,
.medium: 16,
.small: 15,
.extraSmall: 14],
.caption1: [
.accessibilityExtraExtraExtraLarge: 18,
.accessibilityExtraExtraLarge: 18,
.accessibilityExtraLarge: 18,
.accessibilityLarge: 18,
.accessibilityMedium: 18,
.extraExtraExtraLarge: 18,
.extraExtraLarge: 16,
.extraLarge: 14,
.large: 12,
.medium: 11,
.small: 11,
.extraSmall: 11],
.caption2: [
.accessibilityExtraExtraExtraLarge: 17,
.accessibilityExtraExtraLarge: 17,
.accessibilityExtraLarge: 17,
.accessibilityLarge: 17,
.accessibilityMedium: 17,
.extraExtraExtraLarge: 17,
.extraExtraLarge: 15,
.extraLarge: 13,
.large: 11,
.medium: 11,
.small: 11,
.extraSmall: 11],
.footnote: [
.accessibilityExtraExtraExtraLarge: 19,
.accessibilityExtraExtraLarge: 19,
.accessibilityExtraLarge: 19,
.accessibilityLarge: 19,
.accessibilityMedium: 19,
.extraExtraExtraLarge: 19,
.extraExtraLarge: 17,
.extraLarge: 15,
.large: 13,
.medium: 12,
.small: 12,
.extraSmall: 12],
]
}()
class func currentPreferredSize(textStyle: UIFontTextStyle = .body) -> CGFloat {
let contentSize = UIApplication.shared.preferredContentSizeCategory
guard let style = fontSizeTable[textStyle], let fontSize = style[contentSize] else { return 17 }
return fontSize
}
class func preferredFontDescriptor(fontName: String = "SnellRoundhand", textStyle: UIFontTextStyle = .body) -> UIFontDescriptor {
return UIFontDescriptor(name: fontName, size: currentPreferredSize())
}
}
Así es como actualizo la fuente de un prefferedFontForTextStyle:
UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
UIFontDescriptor *fontDesc = [font fontDescriptor];
fontDesc = [fontDesc fontDescriptorByAddingAttributes:@{UIFontDescriptorNameAttribute : @"Helvetica",
UIFontDescriptorSizeAttribute : @16}];
font = [UIFont fontWithDescriptor:fontDesc
size:[fontDesc pointSize]];
Así es como lo hago en Swift. Me gusta porque es más general, solo requiere una tabla, y debería funcionar bien con cualquier fuente. Primero escribí un multiplicador generalizado (en un getter).
var fontSizeMultiplier : CGFloat {
get {
switch UIApplication.sharedApplication().preferredContentSizeCategory {
case UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: return 23 / 16
case UIContentSizeCategoryAccessibilityExtraExtraLarge: return 22 / 16
case UIContentSizeCategoryAccessibilityExtraLarge: return 21 / 16
case UIContentSizeCategoryAccessibilityLarge: return 20 / 16
case UIContentSizeCategoryAccessibilityMedium: return 19 / 16
case UIContentSizeCategoryExtraExtraExtraLarge: return 19 / 16
case UIContentSizeCategoryExtraExtraLarge: return 18 / 16
case UIContentSizeCategoryExtraLarge: return 17 / 16
case UIContentSizeCategoryLarge: return 1.0
case UIContentSizeCategoryMedium: return 15 / 16
case UIContentSizeCategorySmall: return 14 / 16
case UIContentSizeCategoryExtraSmall: return 13 / 16
default: return 1.0
}
}
}
Luego actualizo la fuente (por ejemplo, en el observador) usando un UIFontDescriptor
como este:
textView.font = UIFont(descriptor: fontDescriptor!, size: fontDescriptor!.pointSize * fontSizeMultiplier)
De forma similar al enfoque de @ bill-weinman , tomé las escalas y las dividí en una función que no depende de un tamaño de fuente dado de 16.
/// The font scale for a given font size.
///
/// - seealso: [Source](https://.com/a/33114525/3643020)
///
/// - Parameter fontSize: The font size.
/// - Returns: The font scale
public func fontScale(for fontSize: CGFloat) -> CGFloat {
switch UIApplication.shared.preferredContentSizeCategory {
case UIContentSizeCategory.accessibilityExtraExtraExtraLarge: return (fontSize + 8) / fontSize
case UIContentSizeCategory.accessibilityExtraExtraLarge: return (fontSize + 7) / fontSize
case UIContentSizeCategory.accessibilityExtraLarge: return (fontSize + 6) / fontSize
case UIContentSizeCategory.accessibilityLarge: return (fontSize + 5) / fontSize
case UIContentSizeCategory.accessibilityMedium: return (fontSize + 4) / fontSize
case UIContentSizeCategory.extraExtraExtraLarge: return (fontSize + 3) / fontSize
case UIContentSizeCategory.extraExtraLarge: return (fontSize + 2) / fontSize
case UIContentSizeCategory.extraLarge: return (fontSize + 1) / fontSize
case UIContentSizeCategory.large: return 1.0
case UIContentSizeCategory.medium: return (fontSize - 1) / fontSize
case UIContentSizeCategory.small: return (fontSize - 2) / fontSize
case UIContentSizeCategory.extraSmall: return (fontSize - 3) / fontSize
default:
return 1.0
}
}
Luego se puede usar con fuentes personalizadas como esta:
/// Light font of specified size.
///
/// - Parameter size: Font size.
/// - Returns: Light font of specified size.
func lightFont(ofSize size: CGFloat) -> UIFont {
let scaledSize = size * fontScale(for: size)
return UIFont(name: "HelveticaNeueLTStd-Lt", size: scaledSize)!
}
Detrás de las escenas de esa API, Apple tiene algún tipo de tabla de búsqueda que devuelve una familia de fuentes, tamaños y, a veces, rasgos simbólicos (como negrita) UIFontTextStyleHeadline
(por ejemplo, UIFontTextStyleHeadline
) y el tamaño de texto preferido del usuario. Este último es una cadena extraída de la aplicación sharedApplication
esta manera:
[UIApplication sharedApplication].preferredContentSizeCategory;
(Cerré todos los tamaños / fuentes / rasgos predeterminados para Helvetica-Neue para los diversos tamaños de texto dinámico). Desde entonces, hemos agregado el manejo de los tamaños de accesibilidad, lo cual es importante .
Entonces, todo lo que tienes que hacer es crear una tabla de búsqueda similar. Nuestro diseñador creó una hoja de cálculo simple para mí:
Tenga en cuenta que añadimos un par de estilos (leyendas 3 y 4) para tener 8 en lugar de 6 para elegir.
Entonces querrá ponerlo en un lugar conveniente, como una categoría en UIFontDescriptor
. UIFontDescriptor
su método devuelva un UIFontDescriptor
como la API de Apple, de modo que todavía sea fácil de ajustar con rasgos simbólicos, etc.
Mi categoría se ve así:
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
Elegimos utilizar la misma fuente base AvenirNext-Medium
, y luego negrita y tal a través de rasgos simbólicos, pero podría volverse loco y especificar diferentes variantes de ponderación en su fuente como parte de su tabla de búsqueda si así lo deseara, como AvenirNext-ExtraBold
.
¡Eso es todo al respecto! Lo usamos así:
[UIFont fontWithDescriptor:[UIFontDescriptor preferredAvenirNextFontDescriptorWithTextStyle:UIFontTextStyleHeadline] size: 0]
En iOS 11 puedes usar:
var customFont = UIFont.systemFont(ofSize: 17.0)
if #available(iOS 11.0, *) {
customFont = UIFontMetrics.default.scaledFont(for: customFont)
}
// use customFont...
Consulte también Crear aplicaciones con tipo dinámico WWDC 2017 - Session 245 - Hora de iOS 8:34.
En iOS 11, se introdujo la clase UIFontMetrics
. Cree un objeto FontMetrics para el estilo de texto que le interese. Luego, elija la fuente que desee, con el tamaño para el tamaño de tipo dinámico estándar. Y luego puede pedirle al objeto FontMetrics que escale esa fuente dada la configuración actual del usuario.
let bodyMetrics = UIFontMetrics(forTextStyle: .body)
let standardFont = ... // any font you want, for standard type size
let font = bodyMetrics.scaledFont(for: standardFont)
Prueba esto:
UIFontDescriptor *userHeadLineFont = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleHeadline];
CGFloat userHeadLineFontSize = [userHeadLineFont pointSize];
myFont = [UIFont fontWithName:@"Baskerville" size:userHeadLineFontSize];
Pero tenga en cuenta que este código es solo una aproximación (Dynamic Type hace mucho más que simplemente escalar el tamaño de la fuente).
Solo quería saltar y decir que hay una biblioteca para ayudar a integrar fuentes personalizadas y lidiar con los cambios de tamaño de tipo dinámico. Se llama, amablemente, Font ( Font ) y, en lugar de ser una solución mágica, establece una estructura para manejar cada fuente personalizada de manera diferente al eliminar el texto repetitivo.
nb Soy el autor de esta pequeña biblioteca y creo que es genial.
Swift 2.1-3.0 código basado en el puerto de @ smartDonkey del código @Bob Spryn. También se actualizó con los tamaños de Apple de gist.github.com/klaas/750f489e2390389ab812 .
import UIKit
extension UIFontDescriptor {
private struct SubStruct {
static var preferredFontName: String = "Roboto-Light"
}
class func preferredDescriptor(textStyle: NSString) -> UIFontDescriptor {
struct Static {
static var onceToken : dispatch_once_t = 0
static var fontSizeTable : NSDictionary = NSDictionary()
}
dispatch_once(&Static.onceToken) {
Static.fontSizeTable = [
UIFontTextStyleHeadline: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 23,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 23,
UIContentSizeCategoryAccessibilityExtraLarge: 23,
UIContentSizeCategoryAccessibilityLarge: 23,
UIContentSizeCategoryAccessibilityMedium: 23,
UIContentSizeCategoryExtraExtraExtraLarge: 23,
UIContentSizeCategoryExtraExtraLarge: 21,
UIContentSizeCategoryExtraLarge: 19,
UIContentSizeCategoryLarge: 17,
UIContentSizeCategoryMedium: 16,
UIContentSizeCategorySmall: 15,
UIContentSizeCategoryExtraSmall: 14
],
UIFontTextStyleSubheadline: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 21,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 21,
UIContentSizeCategoryAccessibilityExtraLarge: 21,
UIContentSizeCategoryAccessibilityLarge: 21,
UIContentSizeCategoryAccessibilityMedium: 21,
UIContentSizeCategoryExtraExtraExtraLarge: 21,
UIContentSizeCategoryExtraExtraLarge: 19,
UIContentSizeCategoryExtraLarge: 17,
UIContentSizeCategoryLarge: 15,
UIContentSizeCategoryMedium: 14,
UIContentSizeCategorySmall: 13,
UIContentSizeCategoryExtraSmall: 12
],
UIFontTextStyleBody: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 53,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 47,
UIContentSizeCategoryAccessibilityExtraLarge: 40,
UIContentSizeCategoryAccessibilityLarge: 33,
UIContentSizeCategoryAccessibilityMedium: 28,
UIContentSizeCategoryExtraExtraExtraLarge: 23,
UIContentSizeCategoryExtraExtraLarge: 21,
UIContentSizeCategoryExtraLarge: 19,
UIContentSizeCategoryLarge: 17,
UIContentSizeCategoryMedium: 16,
UIContentSizeCategorySmall: 15,
UIContentSizeCategoryExtraSmall: 14
],
UIFontTextStyleCaption1: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 18,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 18,
UIContentSizeCategoryAccessibilityExtraLarge: 18,
UIContentSizeCategoryAccessibilityLarge: 18,
UIContentSizeCategoryAccessibilityMedium: 18,
UIContentSizeCategoryExtraExtraExtraLarge: 18,
UIContentSizeCategoryExtraExtraLarge: 16,
UIContentSizeCategoryExtraLarge: 14,
UIContentSizeCategoryLarge: 12,
UIContentSizeCategoryMedium: 11,
UIContentSizeCategorySmall: 11,
UIContentSizeCategoryExtraSmall: 11
],
UIFontTextStyleCaption2: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 17,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 17,
UIContentSizeCategoryAccessibilityExtraLarge: 17,
UIContentSizeCategoryAccessibilityLarge: 17,
UIContentSizeCategoryAccessibilityMedium: 17,
UIContentSizeCategoryExtraExtraExtraLarge: 17,
UIContentSizeCategoryExtraExtraLarge: 15,
UIContentSizeCategoryExtraLarge: 13,
UIContentSizeCategoryLarge: 11,
UIContentSizeCategoryMedium: 11,
UIContentSizeCategorySmall: 11,
UIContentSizeCategoryExtraSmall: 11
],
UIFontTextStyleFootnote: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 19,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 19,
UIContentSizeCategoryAccessibilityExtraLarge: 19,
UIContentSizeCategoryAccessibilityLarge: 19,
UIContentSizeCategoryAccessibilityMedium: 19,
UIContentSizeCategoryExtraExtraExtraLarge: 19,
UIContentSizeCategoryExtraExtraLarge: 17,
UIContentSizeCategoryExtraLarge: 15,
UIContentSizeCategoryLarge: 13,
UIContentSizeCategoryMedium: 12,
UIContentSizeCategorySmall: 12,
UIContentSizeCategoryExtraSmall: 12
],
]
}
let contentSize = UIApplication.sharedApplication().preferredContentSizeCategory
let style = Static.fontSizeTable[textStyle] as! NSDictionary
return UIFontDescriptor(name: SubStruct.preferredFontName, size: CGFloat((style[contentSize] as! NSNumber).floatValue))
}
}