Tengo una fuente personalizada que quiero usar para todo lo que muestre texto en mi aplicación, etiquetas, vistas de texto, etc.
¿Hay alguna manera de configurar la fuente predeterminada (las etiquetas usan SystemFont de manera predeterminada) para toda la aplicación?
IBDesignable
estos días. Espero eso ayude. Considere también este interesante QA: stackoverflow.com/a/38000466/294884Respuestas:
Parece posible en iOS 5 usando el proxy UIAppearance.
Eso configurará la fuente para que sea la fuente personalizada para todos los UILabels en su aplicación. Deberá repetirlo para cada control (UIButton, UILabel, etc.).
Recuerde que deberá poner el valor UIAppFonts en su info.plist e incluir el nombre de la fuente que está incluyendo.
fuente
setFont:
el método está en desusoUILabel
. Está en desusoUIButton
pero usa la fuente para latitleLabel
propiedad, que es aUILabel
, por lo que soloUILabel
debería estar bien configurar la fuente con el proxy de apariencia .Swift 5
Basado en la respuesta de Fábio Oliveira ( https://stackoverflow.com/a/23042694/2082851 ), hago mi propio 4 rápido.
En resumen, este intercambio funciones de extensión predeterminada
init(coder:)
,systemFont(ofSize:)
,boldSystemFont(ofSize:)
,italicSystemFont(ofSize:)
con mis métodos personalizados.Tenga en cuenta que no se implementa completamente, pero puede intercambiar más métodos basados en mi implementación.
fuente
if let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String {
hizo el truco para mí.UILabel
s que establezcan estilo de texto (negrita, título, título, etc.) ... solo funciona con fuentes que tienen un tamaño específico y un conjunto de fuentes del sistema. @ nahung89También hay otra solución que será anular systemFont.
Solo crea una categoría
UIFont + SystemFontOverride.h
UIFont + SystemFontOverride.m
Esto reemplazará la implementación predeterminada y la mayoría de UIControls usan systemFont.
fuente
Si está utilizando Swift, puede crear una extensión UILabel:
Y luego, donde haces tu aparición proxy:
Hay un código equivalente de Objective-C que se usa
UI_APPEARANCE_SELECTOR
en una propiedad con el nombresubstituteFontName
.Adición
Para el caso en el que desea establecer fuentes en negrita y regulares por separado:
Luego, para sus proxies de apariencia UIA:
Nota: si descubre que la sustitución en negrita no funciona, es posible que el nombre de fuente predeterminado no contenga "Medio". Cambie esa cadena por otra coincidencia según sea necesario (gracias a Mason en los comentarios a continuación).
fuente
UILabel
extensión para tomar un nombre de fuente adicional en negrita. Luego,set
haga una comprobación para ver si "Negrita" está en el nombre de la fuente e ignore el conjunto en un caso, y úselo en el otro. Editaré y agregaré un ejemplo.rangeOfString("Medium")
y funcionó.Desarrollando a partir de la respuesta de Hugues BR, pero utilizando el método swizzling, llegué a una solución que está cambiando con éxito todas las fuentes a una fuente deseada en mi aplicación.
Un enfoque con Dynamic Type debería ser lo que debe buscar en iOS 7. La siguiente solución no está usando Dynamic Type.
Notas:
- initWithCoder:
anulación. Sin embargo, eso no cubrirá todos los casos;Esta solución utiliza dos métodos diferentes para lograr el resultado final. El primero es anular los métodos de clase UIFont
+ systemFontWithSize:
y similares con los que usan mis alternativas (aquí uso "Zapfino" para no dejar dudas de que el reemplazo fue exitoso).El otro método es anular el
- initWithCoder:
método en UIFont para reemplazar cualquier ocurrenciaCTFontRegularUsage
y similar por mis alternativas. Este último método fue necesario porque descubrí que losUILabel
objetos codificados en archivos NIB no verifican los+ systemFontWithSize:
métodos para obtener la fuente de su sistema y, en cambio, los codifican comoUICTFontDescriptor
objetos. Intenté anular,- awakeAfterUsingCoder:
pero de alguna manera se estaba llamando para cada objeto codificado en mi guión gráfico y provocaba bloqueos. Anular- awakeFromNib
no me permitiría leer elNSCoder
objeto.fuente
UIAlertController
) no cambia la fuente.Para completar la respuesta de Sandy Chapman , aquí hay una solución en Objective-C (coloque esta categoría en cualquier lugar que desee cambiar
UILabel
Appearance
):El archivo de interfaz debe tener este método declarado públicamente para su uso posterior desde lugares como el delegado de su aplicación:
Luego, puede cambiar el
Appearance
con:fuente
COMENTARIO PARA SWIFT 3.0 Y SWIFT WARNING
Puede eliminar el mensaje de advertencia en línea:
Al reemplazarlo con:
fuente
Para Swift 5
Todas las respuestas anteriores son correctas, pero lo he hecho de manera poco diferente según el tamaño del dispositivo . Aquí, en la clase ATFontManager, he hecho el tamaño de fuente predeterminado que se define en la parte superior de la clase como defaultFontSize , este es el tamaño de fuente de iphone plus y puede cambiar según sus requisitos.
He agregado cierto nombre de fuente, para más puede agregar el nombre de fuente y escribir aquí.
Esta clase se refiere al detector de dispositivo para proporcionar el tamaño de fuente apropiado según el dispositivo.
Cómo utilizar. Espero que ayude.
fuente
Ninguna de estas soluciones funciona universalmente en toda la aplicación. Una cosa que encontré para ayudar a administrar las fuentes en Xcode es abrir Storyboard como código fuente (Control-clic en storyboard en el navegador de archivos> "Abrir como"> "Fuente"), y luego hacer una búsqueda y reemplazo.
fuente
El tipo de fuente siempre se establece en código y plumín / guión gráfico.
Para el código, tal como dijo Hugues BR , hacerlo en categoría puede resolver el problema.
Para nib / storyboard, podemos usar Method Swizzling wakekeFromNib para cambiar el tipo de fuente, ya que el elemento de la interfaz de usuario de nib / storyboard siempre lo llama antes de mostrarlo en la pantalla.
Supongo que conoces Aspectos . Es una biblioteca para la programación de AOP, basada en Method Swizzling. Creamos categoría para UILabel, UIButton, UITextView para implementarlo.
UILabel:
UIButton:
UITextField:
UITextView:
Eso es todo, puede cambiar HelveticaNeue-light a una macro con su nombre de fuente.
fuente
Creé mi propia conversión de tipografía para Swift 4 después de revisar algunas publicaciones, cubre la mayoría de los casos, como:
Primero Agregue fuentes a la estructura del proyecto y al archivo .plist (con el mismo nombre):
Luego
Finalmente llame al método creado en el
Appdelegate
siguiente:fuente
Probablemente no, probablemente tendrá que configurar la fuente en su control usted mismo, pero puede facilitar el proceso centralizando de dónde obtiene los tipos de fuente, por ejemplo, delegue la aplicación o alguna otra clase común tenga un método que devuelva el fuente, y cualquier cosa que necesite configurar la fuente puede llamar a ese método, que ayudará en caso de que necesite cambiar su fuente, la cambiaría en un lugar en lugar de en cualquier lugar donde configure las fuentes ... Otra alternativa puede ser hacer subclases de sus elementos de la interfaz de usuario que establecerán automáticamente la fuente, pero eso podría ser excesivo ...
fuente
NUI es una alternativa al proxy UIAppearance. Le da control sobre la fuente (y muchos otros atributos) de una gran cantidad de tipos de elementos de la interfaz de usuario en toda su aplicación simplemente modificando una hoja de estilo, que puede reutilizarse en múltiples aplicaciones.
Después de agregar una
NUILabel
clase a sus etiquetas, puede controlar fácilmente su fuente en la hoja de estilo:Si tiene etiquetas con diferentes tamaños de fuente, puede controlar sus tamaños usando las clases Label, LargeLabel y SmallLabel de NUI, o incluso crear rápidamente sus propias clases.
fuente
Estoy usando este tipo de clase de fuente en Swift. Usando la clase de extensión de fuente.
fuente
Para Xamarin.iOS dentro del
FinishedLaunching()
código de colocación de AppDelegate como este: -establezca la fuente para toda la aplicación y agregue la
UIAppFonts
tecla ' ' en Info.plist, la ruta debe ser la ruta donde se encuentra su archivo de fuente .ttf. Para mí estaba dentro de la carpeta 'fuentes' en mi proyecto.fuente
Como @Randall mencionó, el
UIApperance
proxy iOS 5.0+ se puede usar para personalizar la apariencia de todas las instancias de una clase. Leer más .La función de autocompletar de Xcodes no muestra todas las propiedades disponibles y puede generar un error, pero puede escribirlo y se compilará.
fuente
Logramos lo mismo en Swift -Xcode 7.2 usando el controlador de vista principal y el controlador de vista secundario (herencia).
Archivo - Nuevo - Clase Cocoa Touch - ParentViewController.
Haga controladores de vista para niños y asócielos con un StoryBoard VC, agregue textLabel.
O haga una clase UILabel personalizada (método de subclasificación) y asóciele las etiquetas requeridas.
Nota: La fuente y el color declarados en Parent VC se implementan en CustomFontLabel. La ventaja es que podemos alterar las propiedades de uilabel / cualquier vista todos juntos en algunos cambios simples en Parent VC.
2) 'para' bucle UIView para sub vistas. Funciona solo en un VC particular.
fuente