34

全体にカスタム フォントを適用しようとしていますiOS app。私が使用できることがわかりました:

 [[UILabel appearance] setFont:[UIFont fontWithName:@"Proxima Nova" size:17.0]];
  • すべてのデフォルトのフォントとサイズを設定しますUILabels。ただし、すべてのUILabelsユーザーが同じフォント サイズを共有しているわけではありません。

  • iOSアプリ全体の既定のフォントを設定しますか? 、誰かが同じ懸念を持っていて、サイズパラメーターを0.0に設定して、フォントサイズではなくフォントのみを設定するように言われました.

  • これを実行しようとすると、アプリ内のすべてのUILabelテキストが消えました (iOS文字どおり 0.0 のフォント サイズを使用していたためです)。

サイズではなくフォントを普遍的に設定する方法について何か提案はありますか? どうもありがとう!

4

7 に答える 7

24
- (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];
        }
    }    
}
于 2012-08-27T10:10:13.623 に答える
19

これが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"];
于 2015-04-16T13:53:50.107 に答える
12

私は自分のプロジェクトで受け入れられた答えを使用しましたが、より一般的な機能が必要だったので、フォントを可能な限りすべてに変更します。また、いくつかのストックフォントとカスタムフォントの間のマッピングを設定することを選択したので、 '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];
        }
    }
}
于 2013-04-30T20:50:34.130 に答える
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)
        }
    }
     }
于 2016-09-28T15:03:59.737 に答える
3

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] ];
于 2014-02-15T00:54:24.977 に答える