iOS如何根据屏幕的大小类调整UILabel或UITextField字体大小?

时间:2015-08-03 15:18:58

标签: ios autolayout uitextfield uifont size-classes

我正在使用大小类和自动布局构建和界面。我遇到的问题之一是我不能再为文本字段使用固定的字体大小 - 在较小的屏幕上可以看到较少的文本。

其中一个解决方案是使用"调整以适应"但是该选项仅在有足够的文本水平溢出文本字段时才有效。 enter image description here

运行时UITextField大小未知时使用的字体大小的正确解决方案是什么?

3 个答案:

答案 0 :(得分:3)

我为所有标签使用自定义类,并在设计时分配两个属性。一个是autoFont,另一个是fontSize,它目前是iPhone 4英寸xib在设计时的字体大小。这是班级。

.h文件

#import <UIKit/UIKit.h>

@interface CustomLabel : UILabel

@property (nonatomic) IBInspectable BOOL autoFont;

@property (nonatomic) IBInspectable CGFloat fontSize;

@end

这是.m文件

#import "CustomLabel.h"

@implementation CustomLabel

@synthesize autoFont;
@synthesize fontSize;

- (void)layoutSubviews
{
    [super layoutSubviews];

    if (autoFont) {
        float newFontSize = [UIScreen mainScreen].bounds.size.height * (fontSize / 568.0);
        if ([UIScreen mainScreen].bounds.size.height < 500) {
            newFontSize = [UIScreen mainScreen].bounds.size.height * (fontSize / 480.0);
        }
        self.font = [UIFont fontWithName:self.font.fontName size:newFontSize];
    }
}

@end

我认为这是解决此类问题的最简单方法,而且我通过自定义类使用按钮和文本字段也做了同样的事情。

答案 1 :(得分:2)

我意识到非界面构建者的灵魂。 您可以获得屏幕高度并相应地设置标签字体。

CGFloat windowHeight = [UIApplication sharedApplication].delegate.window.frame.size.height;
label.font = [UIFont fontWithName:@"Font-Name" size:windowHeight / 10];

答案 2 :(得分:0)

UILabel也有类似的问题。我不知道它是否适用于UITextField。没有足够的声誉来评论,所以在这里。基本上是:

  • 将字体大小设置为非常大(例如:200)
  • 因弃用而使用minimumScaleFactor代替minimumFontSize

请参阅:

How to set font size to fill UILabel height?

Dynamically changing font size - UILabel

uilabel not autoshrinking text to fit label size