Swash es una abstracción simple, segura y expresiva de UIFont con soporte de horno para el tipo dinámico.
Para definir una fuente personalizada, simplemente cree una enumación String que se ajuste al protocolo Font .
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}¡Eso es todo lo que necesitas para comenzar a usar tu fuente en tu proyecto!
label . font = Papyrus . regular . of ( size : 17 ) Utiliza UIFontMetrics para escalar. Configuración de adjustsFontForContentSizeCategory a true le dice a la etiqueta que actualice automáticamente la fuente cuando el usuario cambia su preferencia de tamaño de contenido. Consulte nuestra publicación de blog para obtener orientación sobre cómo elegir los tamaños predeterminados para los estilos de texto, o simplemente use los valores predeterminados proporcionados por Swash extraídos de las pautas de la interfaz humana de Apple para iOS, WatchOS y TVOS.
label1 . adjustsFontForContentSizeCategory = true
label2 . adjustsFontForContentSizeCategory = true
label1 . font = Papyrus . condensed . of ( textStyle : . headline )
// Optional size cutoff and default size.
label2 . font = GillSans . bold . of ( textStyle : . title1 , defaultSize : 28 , maxSize : 38 ) Utiliza escala de fuente del sistema, sin valor de tamaño predeterminado. adjustsFontForContentSizeCategory requiere el uso de UIFontMetrics , por lo que no sirve de nada para las fuentes personalizadas antes de iOS 11. Tendrá que actualizar las fuentes manualmente, ya sea en traitCollectionDidChange(_:) o observar la notificación de UIContentSizeCategoryDidChange .
label . font = Papyrus . condensed . of ( style : . headline )
// Optional size cutoff
label . font = GillSans . bold . of ( style : . title1 , maxSize : 30 ) Puede usar SystemFont para admitir el tipo dinámico para diferentes pesos y unificar aún más la sintaxis de fuentes en su proyecto.
label1 . font = SystemFont . light . of ( size : 17 )
label2 . adjustsFontForContentSizeCategory = true
label2 . font = SystemFont . preferred . of ( textStyle : . body )
label3 . font = SystemFont . semiboldItalic . of ( textStyle : . body , maxSize : 30 ) Nota importante: adjustsFontForContentSizeCategory solo funciona con SystemFont para el peso preferred con un valor Nil maxSize . En cualquier otro caso, deberá actualizar la fuente, ya sea en traitCollectionDidChange(_:) o observando la notificación UIContentSizeCategoryDidChange . Esto se debe a que el peso preferred devuelve directamente el resultado de UIFont.preferredFont(forTextStyle:) .
Puede implementar la propiedad boldTextMapping en cualquier Font para admitir la configuración del dispositivo "Texto Bold" en iOS y TVOS.
var boldTextMapping: MyFont {
switch self {
case .regular: return .bold
case .bold: return .black
case .black: return self
}
}
Ahora cada instancia regular MyFont se volverá audaz si el usuario tiene "texto audaz" activado en la configuración de su dispositivo.
Si lo desea, puede observar UIAccessibility.boldTextStatusDidChangeNotification a través de NotificationCenter y establecer sus fuentes cuando eso se actualice.
Puede implementar la propiedad estática cascadeList en cualquier Font para admitir la cascada de fuentes. En el caso de que su fuente no admite un personaje que se usa en una etiqueta, esta lista proporcionará fuentes respiratorias para usar.
enum Papyrus: String, Font {
case condensed = "Papyrus-Condensed"
case regular = "Papyrus"
var cascadeList: [CascadingFontProperties] {
[.init(Damascus.regular)]
}
}
El papiro no apoya los caracteres árabes. Entonces, aquí hemos proporcionado a Damasco como un respaldo. Si no se proporciona no respaldo, la fuente del sistema se utilizará para caracteres no compatibles.
¡Swash puede intentar registrar su fuente de fuente para usted!
Swash . logBoilerplate ( forFontsWithFamilyNamesContaining : " gill " )Producción:
enum GillSans: String, Font {
case GillSans-Italic = "GillSans-Italic"
case GillSans-SemiBold = "GillSans-SemiBold"
case GillSans-UltraBold = "GillSans-UltraBold"
case GillSans-Light = "GillSans-Light"
case GillSans-Bold = "GillSans-Bold"
case GillSans = "GillSans"
case GillSans-SemiBoldItalic = "GillSans-SemiBoldItalic"
case GillSans-BoldItalic = "GillSans-BoldItalic"
case GillSans-LightItalic = "GillSans-LightItalic"
}
Simplemente copie la salida de la salida en su proyecto. Probablemente aún necesite médicos los nombres de los casos un poco.
Si su fuente personalizada no puede inicializarse, assertionFailure(_:file:line:) se llama a. Esto se bloqueará la depuración con el conjunto de optimización del compilador predeterminado -Onone . Esto es para ayudar a identificar las inicializaciones de fuentes fallidas que de otro modo pueden ser difíciles de atrapar. Las construcciones de lanzamiento con niveles de optimización más altos no se bloquearán , por lo que no tiene que preocuparse por que su aplicación se bloquee en la producción por una fuente tonta.
pod 'Swash' github "Mindgrub/Swash"
Asegúrese de especificar su plataforma cuando actualice (por ejemplo, carthage update --platform iOS ). De lo contrario, se agregarán los 3 marcos (iOS, TVOS y WatchOS).
Swash está disponible bajo la licencia MIT. Consulte el archivo de licencia para obtener más información.