最近在做一個(gè)類似微軟翻譯APP的圖片翻譯的功能(圖片識(shí)別雹有,對(duì)識(shí)別結(jié)果進(jìn)行翻譯涛碑,翻譯結(jié)果展示在圖片對(duì)應(yīng)原文位置)分俯。下面是微軟圖片識(shí)別的界面
微軟翻譯-圖片翻譯截圖.png
其中文字的空間自適應(yīng)用到了UILabel的adjustsFontSizeToFitWidth屬性蹈垢、基線調(diào)整baselineAdjustment屬性畜伐。
UILabel *line = [[UILabel alloc] initWithFrame:rect];
line.textColor = [UIColor whiteColor];
line.adjustsFontSizeToFitWidth = YES;
line.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
[self.contentView addSubview:line];
可是結(jié)果確是這樣的丈咐,看似adjustsFontSizeToFitWidth屬性并沒(méi)起到作用瑞眼。
圖片翻譯截圖.png
經(jīng)過(guò)我的調(diào)研發(fā)現(xiàn),adjustsFontSizeToFitWidth調(diào)整字體是有條件的棵逊,當(dāng)文字寬大于文本控件的寬時(shí)伤疙,它可以調(diào)整并適應(yīng)控件的寬;而當(dāng)文字的寬小于文本控件的寬時(shí)辆影,它不做調(diào)整徒像。所以,如果要文字填充滿文本控件的寬的話蛙讥,需要給UILabel設(shè)置一個(gè)比較大的字號(hào)锯蛀,使文字的寬大于文本控件的寬。
UILabel *line = [[UILabel alloc] initWithFrame:rect];
line.textColor = [UIColor whiteColor];
//設(shè)置一個(gè)比較大的字號(hào)次慢,使文字的寬大于文本控件的寬旁涤,文字才能填充滿文本控件的寬
line.font = [UIFont systemFontOfSize:200];
line.adjustsFontSizeToFitWidth = YES;
line.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
[self.contentView addSubview:line];
調(diào)整后的效果.png
后記:
中文識(shí)別轉(zhuǎn)英文,這樣做沒(méi)有問(wèn)題迫像。但是如果英文識(shí)別轉(zhuǎn)中文劈愚,就會(huì)出現(xiàn)問(wèn)題。
由于中文的一句話闻妓,普遍比英文短菌羽,自適應(yīng)寬度,高度就會(huì)被拉大由缆,導(dǎo)致上下兩行文字遮擋的問(wèn)題注祖。
解決辦法:根據(jù)區(qū)域高度,計(jì)算一個(gè)不超過(guò)區(qū)域高度的字號(hào)大小均唉,同時(shí)設(shè)置寬度自適應(yīng)氓轰。
UILabel *line = [[UILabel alloc] initWithFrame:rect];
line.textColor = [UIColor whiteColor];
//保證字號(hào)不超過(guò)控件區(qū)域的高度
CGFloat fontNumber = rect.size.height * 0.6;
line.font = [UIFont systemFontOfSize:fontNumber];
//如果超過(guò)控件區(qū)域的寬度,自適應(yīng)
line.adjustsFontSizeToFitWidth = YES;
line.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
如果文字不超過(guò)區(qū)域?qū)挾冉裕瑒t根據(jù)設(shè)置字號(hào)“適應(yīng)”高度顯示署鸡;如果文字超過(guò)區(qū)域?qū)挾龋赃m應(yīng)寬度顯示。