使用autolayout更改UILabel的字体

时间:2015-03-16 15:27:23

标签: ios objective-c autolayout uilabel

通常,您使用:

label.adjustsFontSizeToFitWidth = YES;

制作标签,以便在无法再增加其框架大小时减小其字体大小。

有没有什么方法可以让它尝试使用替代字体,比如相同字体系列的精简版本,然后再缩小字体大小?

2 个答案:

答案 0 :(得分:3)

有一些好方法可以解决这个问题。在IB中选择您的标签:

方法1:

enter image description here

如果单击加号按钮,则可以为给定的大小类添加特定字体。

在代码中:

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
    if(self.view.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular && self.view.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassRegular)
    {
        //iPad here
        myLbl.Font = [UIFont fontWithName:@"Heyo" size:10];
    }
}

在我看来,更好的方法是方法2:

enter image description here

使用这种方法,您可以告诉字体缩小到一定大小,或者改为识别比例因子。玩具有这些值,直到获得所需的结果。我还在这个tutorial中讨论了这个主题。

在代码中:

//Minimum font size
[myLbl setMinimumScaleFactor:MIN_FONT_SIZE/[UIFont labelFontSize]];

//Scale factor
[myLbl setMinimumScaleFactor:0.4];

答案 1 :(得分:1)

这对我没有用,但确实如此。 您还需要在IB

中使用系统字体
#import <UIKit/UIKit.h>

@interface UILabelEx : UILabel


@end

#import "UILabelEx.h"
#import "Constants.h"

@implementation UILabelEx

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];

    self.font = [UIFont fontWithName:APP_FONT size:self.font.pointSize];   
}
@end