UILabel属性adjustsFontSizeToFitWidth无效

最近在做一个类似微软翻译APP的图片翻译的功能(图片识别,对识别结果进行翻译,翻译结果展示在图片对应原文位置)。下面是微软图片识别的界面

UILabel属性adjustsFontSizeToFitWidth无效_第1张图片
微软翻译-图片翻译截图.png

其中文字的空间自适应用到了UILabel的adjustsFontSizeToFitWidth属性、基线调整baselineAdjustment属性。

        UILabel *line = [[UILabel alloc] initWithFrame:rect];
        line.textColor = [UIColor whiteColor];
        line.adjustsFontSizeToFitWidth = YES;
        line.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
        [self.contentView addSubview:line];

可是结果确是这样的,看似adjustsFontSizeToFitWidth属性并没起到作用。

UILabel属性adjustsFontSizeToFitWidth无效_第2张图片
图片翻译截图.png

经过我的调研发现,adjustsFontSizeToFitWidth调整字体是有条件的, 当文字宽大于文本控件的宽时,它可以调整并适应控件的宽;而当文字的宽小于文本控件的宽时,它不做调整。所以,如果要文字填充满文本控件的宽的话, 需要给UILabel设置一个比较大的字号,使文字的宽大于文本控件的宽

        UILabel *line = [[UILabel alloc] initWithFrame:rect];
        line.textColor = [UIColor whiteColor];
        //设置一个比较大的字号,使文字的宽大于文本控件的宽,文字才能填充满文本控件的宽
        line.font = [UIFont systemFontOfSize:200];
        line.adjustsFontSizeToFitWidth = YES;
        line.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
        [self.contentView addSubview:line];
UILabel属性adjustsFontSizeToFitWidth无效_第3张图片
调整后的效果.png

后记:

中文识别转英文,这样做没有问题。但是如果英文识别转中文,就会出现问题。
由于中文的一句话,普遍比英文短,自适应宽度,高度就会被拉大,导致上下两行文字遮挡的问题。
解决办法:根据区域高度,计算一个不超过区域高度的字号大小,同时设置宽度自适应。

        UILabel *line = [[UILabel alloc] initWithFrame:rect];
        line.textColor = [UIColor whiteColor];
        //保证字号不超过控件区域的高度
        CGFloat fontNumber = rect.size.height * 0.6;
        line.font = [UIFont systemFontOfSize:fontNumber];
        //如果超过控件区域的宽度,自适应
        line.adjustsFontSizeToFitWidth = YES;
        line.baselineAdjustment = UIBaselineAdjustmentAlignCenters;

如果文字不超过区域宽度,则根据设置字号“适应”高度显示;如果文字超过区域宽度,自适应宽度显示。

你可能感兴趣的:(UILabel属性adjustsFontSizeToFitWidth无效)