Как настроить собственный шрифт для всего приложения iOS без указания размера
Я пытаюсь применить собственный шрифт на протяжении всего iOS app
. Я обнаружил, что могу использовать:
[[UILabel appearance] setFont:[UIFont fontWithName:@"Proxima Nova" size:17.0]];
-
Чтобы установить шрифт и размер по умолчанию для всех UILabels
. Однако не все мои теги UILabels
имеют одинаковый размер шрифта.
-
В Установите шрифт по умолчанию для всего приложения iOS?, у кого-то была такая же проблема, и ему сказали установить параметр размера 0.0, чтобы установить только шрифт, а не размер шрифта.
- Когда я попытался это сделать, весь текст
UILabel
в моем приложении исчез (потому что, очевидно, iOS
взял размер шрифта 0.0 буквально).
Любые предложения относительно того, как я могу универсально установить шрифт, но не размер? Большое спасибо!
Ответы
Ответ 1
- (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];
}
}
}
Ответ 2
Вот решение в Objective-C, поместите эту категорию в любом месте, где хотите изменить UILabel
Apperance
без установки UILabel
FontSize
:
@implementation UILabel (SubstituteFontName)
- (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR {
self.font = [UIFont fontWithName:name size:self.font.pointSize];
}
@end
Затем вы можете изменить Apperance
на:
[[UILabel appearance] setSubstituteFontName:@"SourceSansPro-Light"];
Ответ 3
Я использовал принятый ответ в своем проекте, но нуждался в более общей функции, поэтому он изменит шрифт на каждый возможный, также я решил установить сопоставление некоторых фондовых шрифтов с нашими пользовательскими шрифтами, поэтому они будут доступны через файлы storybuilder и xib.
+ (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];
}
}
}
Ответ 4
Написав категорию для метки, мы можем изменить шрифты всего приложения.
@implementation UILabel (CustomeFont)
-(void)awakeFromNib
{
[super awakeFromNib];
[self setBackgroundColor:[UIColor clearColor]];
[self setFont:[UIFont fontWithName:@"Helvetica" size:self.font.pointSize]];
}
@end
Ответ 5
Swift3
https://gist.github.com/dimohamdy/c47992e14c1a3ee3315c06e2480e121e
вы не можете установить внешний вид шрифта ярлыка, который заставляет меня создавать другое значение шрифта по умолчанию, и когда я устанавливаю новый шрифт, я получаю только имя нового шрифта и старого размера метки и создаю другой шрифт и устанавливаю этот шрифт
//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)
}
}
}
Ответ 6
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: без цвета:
#import "UIView+DefaultFontAndColor.h"
UIView myView = [[UIView alloc] init]
[myView setDefaultFontFamily:@"Arial" andSubViews:YES andColor:nil];
@usage: с цветом:
#import "UIView+DefaultFontAndColor.h"
UIView myView = [[UIView alloc] init]
[myView setDefaultFontFamily:@"Arial" andSubViews:YES andColor:[UIColor greenColor] ];