为所有UILabel全局设置adjustsFontSizeToFitWidth

时间:2014-06-03 21:58:02

标签: ios objective-c

我们有一个多语言应用,其中标签中的文字大小可能会根据使用的语言而改变。例如德语在很多空间中使用的空间比英语多。在这种情况下,iOS会自动缩小文本,用"替换中间字母。"

e.g。取消变为Ca ..el

通过在标签中将adjustsFontSizeToFitWidth设置为YES,可以轻松地单独修复这些案例。但是,为那里的每个标签做这件事都很费力。

有没有办法可以为应用中的所有UILabel个实例全局设置为YES?我尝试使用UIAppearance,但它似乎不支持adjustsFontSizeToFitWidth属性。

2 个答案:

答案 0 :(得分:1)

我认为你可以在ViewDidLoad中为app的每个ViewController添加以下代码:

NSArray *allSub = [self.view subviews];
for (id sub in allSub) {

    if ([sub isKindOfClass:[UILabel class]]) {
        UILabel *lb =sub;
        lb.adjustsFontSizeToFitWidth = YES;
    }
}

答案 1 :(得分:1)

我认为更清洁的方法是为UILabel做一个类别:

#import <UIKit/UIKit.h>

@interface UILabel (FR)

@property(nonatomic) UIBaselineAdjustment baselineAdjustment;
@property(nonatomic) CGFloat minimumScaleFactor;

@end

#import "UILabel+FR.h"

@implementation UILabel (FR)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (void)didMoveToSuperview {
    self.adjustsFontSizeToFitWidth = YES;
    self.minimumScaleFactor = 0.5;

    [super didMoveToSuperview];
}

#pragma clang diagnostic pop

@end

并将其包含在Prefix.h文件中