【问题标题】:Change font of UILabel with autolayout使用自动布局更改 UILabel 的字体
【发布时间】:2015-03-16 15:27:22
【问题描述】:

通常,您使用:

label.adjustsFontSizeToFitWidth = YES;

让标签在不再可能增加其框架大小时减小其字体大小。

有没有办法让它在减小字体大小之前尝试替代字体,例如同一字体系列的精简版本?

【问题讨论】:

  • 我的回答解决了你的问题吗?
  • 感谢您的努力,但我需要一个程序化解决方案。最后,我只是更改了设计,以便不再需要这种行为。我仍然想知道如何做,但我还没有时间弄清楚你的解决方案是否可行。

标签: ios objective-c autolayout uilabel


【解决方案1】:

有一些很好的方法来处理这个问题。在 IB 中选择您的标签:

方法一:

如果您点击加号按钮,您可以为给定的大小等级添加特定的字体。

在代码中:

- (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:

使用这种方法,您可以告诉字体缩小到某个大小,或者确定一个比例因子。玩弄这些值,直到获得所需的结果。我在这个tutorial也谈到了这个话题。

在代码中:

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

//Scale factor
[myLbl setMinimumScaleFactor:0.4];

【讨论】:

  • 谢谢。看起来这有点痛苦,但以编程方式执行。也许我应该改用 sizeToFit?
  • 您仍然可以指定最小字体大小,这样它就可以像现在已弃用的 label.minimumFontSize 一样工作。例如,如果您希望最少 18 个点,您可以这样做:[myLabel setMinimumScaleFactor:18/[UIFont labelFontSize]]。或者,如果您不想要最小字体大小,则可以只使用 setMinimumScaleFactor。
【解决方案2】:

这对我不起作用,但确实如此。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2018-06-10
    • 2013-06-24
    • 1970-01-01
    相关资源
    最近更新 更多