iphone - español - Cómo configurar una fuente personalizada para toda la aplicación iOS sin especificar el tamaño
que es uikit ios (7)
Al escribir la categoría para la etiqueta, podemos cambiar las fuentes de toda la aplicación.
@implementation UILabel (CustomeFont)
-(void)awakeFromNib
{
[super awakeFromNib];
[self setBackgroundColor:[UIColor clearColor]];
[self setFont:[UIFont fontWithName:@"Helvetica" size:self.font.pointSize]];
}
@end
Estoy tratando de aplicar una fuente personalizada en mi iOS app
. Encontré que podría usar:
[[UILabel appearance] setFont:[UIFont fontWithName:@"Proxima Nova" size:17.0]];
Para establecer la fuente y el tamaño predeterminados para todos los
UILabels
. Sin embargo, no todos misUILabels
comparten el mismo tamaño de fuente.En Establecer una fuente predeterminada para toda la aplicación de iOS? , alguien tenía la misma preocupación, y se le dijo que estableciera el parámetro de tamaño en 0.0 para establecer solo la fuente y no el tamaño de la fuente.
- Cuando traté de hacerlo, desapareció todo el texto de
UILabel
en mi aplicación (porque evidentementeiOS
tomó literalmente el tamaño de letra 0.0).
¿Alguna sugerencia sobre cómo puedo establecer universalmente una fuente pero no el tamaño? ¡Muchas gracias!
Aquí hay una solución en Objective-C, coloque esta categoría donde quiera cambiar UILabel
sin configurar UILabel
:
@implementation UILabel (SubstituteFontName)
- (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR {
self.font = [UIFont fontWithName:name size:self.font.pointSize];
}
@end
Luego, puede cambiar Apperance
con:
[[UILabel appearance] setSubstituteFontName:@"SourceSansPro-Light"];
He utilizado la respuesta aceptada en mi proyecto, pero necesitaba una función más genérica, por lo que cambiará la fuente a cada posible, también he elegido establecer una asignación entre algunas fuentes de papel para nuestras fuentes personalizadas, por lo que Serán accesibles a través de storybuilder y archivos xib también.
+ (void)setupFontsForView:(UIView *)view andSubViews:(BOOL)isSubViews
{
if ([view respondsToSelector:@selector(setFont:)] && [view respondsToSelector:@selector(font)]) {
id viewObj = view;
UIFont *font = [viewObj font];
if ([font.fontName isEqualToString:@"AcademyEngravedLetPlain"]) {
[viewObj setFont:[UIFont fontWithName:PRIMARY_FONT size:font.pointSize]];
} else if ([font.fontName hasPrefix:@"AmericanTypewriter"]) {
[viewObj setFont:[UIFont fontWithName:SECONDARY_FONT size:font.pointSize]];
}
}
if (isSubViews) {
for (UIView *sview in view.subviews) {
[self setupFontsForView:sview andSubViews:YES];
}
}
}
La respuesta de Raegtime ala Swift ...
import UIKit
extension UIViewController {
func setFontFamilyForView(_ fontFamily: String, view: UIView, andSubviews: Bool) {
if let label = view as? UILabel {
label.font = UIFont(name: fontFamily, size: label.font.pointSize)
}
if let textView = view as? UITextView {
textView.font = UIFont(name: fontFamily, size: textView.font!.pointSize)
}
if let textField = view as? UITextField {
textField.font = UIFont(name: fontFamily, size: textField.font!.pointSize)
}
if andSubviews {
for v in view.subviews {
setFontFamilyForView(fontFamily, view: v, andSubviews: true)
}
}
}
}
Swift3 https://gist.github.com/dimohamdy/c47992e14c1a3ee3315c06e2480e121e
no puede establecer la apariencia de la fuente de la etiqueta que me hace crear otro valor de la fuente predeterminada y cuando configuro la nueva fuente obtengo solo el nombre de la nueva fuente y el tamaño anterior de la etiqueta y creo otra fuente y configuro esta fuente
//when you want to set font for all labels in Application
UILabel.appearance().defaultFont = UIFont.systemFont(ofSize: 15/*Any Value*/, weight: UIFontWeightThin)
extension UILabel{
dynamic var defaultFont: UIFont? {
get { return self.font }
set {
//get old size of lable font
let sizeOfOldFont = self.font.pointSize
//get new name of font
let fontNameOfNewFont = newValue?.fontName
self.font = UIFont(name: fontNameOfNewFont!, size: sizeOfOldFont)
}
}
}
UIView + DefaultFontAndColor.h
#import <UIKit/UIKit.h>
@interface UIView (DefaultFontAndColor)
-(void)setDefaultFontFamily:(NSString*)fontFamily andSubViews:(BOOL)isSubViews andColor:(UIColor*) color;
@end
UIView + DefaultFontAndColor.m
#import "UIView+DefaultFontAndColor.h"
@implementation UIView (DefaultFontAndColor)
//sets the default font for view classes by default
-(void)setDefaultFontFamily:(NSString*)fontFamily andSubViews:(BOOL)isSubViews andColor: (UIColor*) color
{
if ([self isKindOfClass:[UILabel class]])
{
UILabel *lbl = (UILabel *)self;
[lbl setFont:[UIFont fontWithName:fontFamily size:[[lbl font] pointSize]]];
if( color )
lbl.textColor = color;
}
else if ([self isKindOfClass:[UIButton class]])
{
UIButton *btn = (UIButton *)self;
[btn.titleLabel setFont:[UIFont fontWithName:fontFamily size:[[btn.titleLabel font] pointSize]]];
if( color )
{
btn.tintColor = color;
}
}
if (isSubViews)
{
for (UIView *sview in self.subviews)
{
[sview setDefaultFontFamily:fontFamily andSubViews:YES andColor:color];
}
}
}
@end
@usage: sin color:
#import "UIView+DefaultFontAndColor.h"
UIView myView = [[UIView alloc] init]
[myView setDefaultFontFamily:@"Arial" andSubViews:YES andColor:nil];
@usage: con color:
#import "UIView+DefaultFontAndColor.h"
UIView myView = [[UIView alloc] init]
[myView setDefaultFontFamily:@"Arial" andSubViews:YES andColor:[UIColor greenColor] ];
- (void)viewDidLoad
{
[super viewDidLoad];
[self setFontFamily:@"FagoOfficeSans-Regular" forView:self.view andSubViews:YES];
}
-(void)setFontFamily:(NSString*)fontFamily forView:(UIView*)view andSubViews:(BOOL)isSubViews
{
if ([view isKindOfClass:[UILabel class]])
{
UILabel *lbl = (UILabel *)view;
[lbl setFont:[UIFont fontWithName:fontFamily size:[[lbl font] pointSize]]];
}
if (isSubViews)
{
for (UIView *sview in view.subviews)
{
[self setFontFamily:fontFamily forView:sview andSubViews:YES];
}
}
}