美文网首页
UILabel属性adjustsFontSizeToFitWid

UILabel属性adjustsFontSizeToFitWid

作者: SySean | 来源:发表于2018-06-05 17:16 被阅读327次

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

    微软翻译-图片翻译截图.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属性并没起到作用。

    图片翻译截图.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];
    
    调整后的效果.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属性adjustsFontSizeToFitWid

          本文链接:https://www.haomeiwen.com/subject/aicmsftx.html