因?yàn)轫?xiàng)目開發(fā)中經(jīng)常碰到界面設(shè)計(jì)的UILabel
多語(yǔ)言適配問題他爸,所以在這里記錄下自己處理這些問題中的一些心得耳胎。假如你的工程中需要用到UILabel
顯示一個(gè)簡(jiǎn)單的文本“你好”悼粮,并支持日文顯示掀淘,日文你好“こんにちは”竖席,一般UI設(shè)計(jì)師會(huì)給你UILabel的尺寸耘纱,例如40pt。于是你開始寫代碼:
UILabel *chineseLabel = [[UILabel alloc] init];
chineseLabel.text = @"你好";
chineseLabel.textAlignment = NSTextAlignmentCenter;
chineseLabel.backgroundColor = [UIColor redColor];
chineseLabel.textColor = [UIColor whiteColor];
[self.view addSubview:chineseLabel];
[chineseLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view);
make.centerY.equalTo(self.view).offset(-40);
make.width.mas_equalTo(40);
}];
最后顯示出來(lái)的結(jié)果很好:
但是當(dāng)切換到日文的時(shí)候毕荐,顯示的結(jié)果卻會(huì)變成這樣子:
日文的"你好"沒有顯示完全束析,很明顯這是因?yàn)槟愕膶挾仍O(shè)置了40pt,也許有人會(huì)覺得可以修改寬度到60pt就可以了憎亚。沒錯(cuò)员寇,這是最簡(jiǎn)單粗暴的方法。但是你必須考慮到一個(gè)項(xiàng)目支持的往往不止日文虽填,可能還會(huì)包括英文丁恭,泰文,韓文等等斋日。所以對(duì)每一個(gè)語(yǔ)言進(jìn)行判斷牲览,然后適配寬度,就會(huì)顯得比較低效,也不易后期的維護(hù)第献。
解決UILabel的多語(yǔ)言適配問題贡必,我覺得可以根據(jù)label的寬度和字體是否可變分為三種情況進(jìn)行處理:
- label的寬度可變:
label的寬度可變的話,我們可以利用UILabel
的sizeToFit
方法庸毫,讓label根據(jù)文本大小自適應(yīng)寬度仔拟。我們并不需要在代碼中強(qiáng)制去設(shè)置label的寬度,代碼如下所示:
顯示結(jié)果如下所示:UILabel *jpLabel = [[UILabel alloc] init]; jpLabel.text = @"こんにちは"; jpLabel.textAlignment = NSTextAlignmentCenter; jpLabel.backgroundColor = [UIColor redColor]; jpLabel.textColor = [UIColor whiteColor]; [jpLabel sizeToFit]; [self.view addSubview:jpLabel]; [jpLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(self.view); // make.width.mas_equalTo(40); }];
-
label的寬度不可變:
有時(shí)候設(shè)計(jì)的UI比較復(fù)雜飒赃,如果某一個(gè)label的寬度變了利花,會(huì)影響到其他界面的顯示,那么我們就不能隨意的根據(jù)文本的長(zhǎng)度修改label的寬度载佳。這時(shí)候我們可以考慮使用UILabel
的adjustsFontSizeToFitWidth
屬性炒事。這個(gè)屬性的作用是如果文本的長(zhǎng)度超出了label的寬度,則縮小文本的字體大小來(lái)讓文本完全顯示蔫慧。代碼如下:UILabel *chineseLabel = [[UILabel alloc] init]; chineseLabel.adjustsFontSizeToFitWidth = YES; chineseLabel.text = @"你好"; chineseLabel.textAlignment = NSTextAlignmentCenter; chineseLabel.backgroundColor = [UIColor redColor]; chineseLabel.textColor = [UIColor whiteColor]; [chineseLabel sizeToFit]; [self.view addSubview:chineseLabel]; [chineseLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.view); make.centerY.equalTo(self.view).offset(-40); make.width.mas_equalTo(40); }]; UILabel *jpLabel = [[UILabel alloc] init]; jpLabel.adjustsFontSizeToFitWidth = YES; jpLabel.text = @"こんにちは"; jpLabel.textAlignment = NSTextAlignmentCenter; jpLabel.backgroundColor = [UIColor redColor]; jpLabel.textColor = [UIColor whiteColor]; [self.view addSubview:jpLabel]; [jpLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(self.view); make.width.mas_equalTo(40); }];
顯示結(jié)果如下所示:
-
label的字體和寬度都不可變
當(dāng)遇到這種情況的時(shí)候挠乳,我覺得已經(jīng)不是代碼層面可以搞定的時(shí)候,這時(shí)候可以尋求產(chǎn)品大大和翻譯大大的幫助姑躲,看下是否可以縮短文案的長(zhǎng)度~~
特別說(shuō)明一點(diǎn)
adjustsFontSizeToFitWidth
只是根據(jù)你設(shè)置的初始字體大小去縮小字體睡扬,即當(dāng)你設(shè)置的初始font大小為14的時(shí)候,設(shè)置adjustsFontSizeToFitWidth
為YES黍析,字體大小都只會(huì)小于等于14.UILabel
還有一個(gè)屬性minimumScaleFactor
卖怜,可以通過(guò)這個(gè)屬性設(shè)置字體可縮小的最小比例。一般可以配合adjustsFontSizeToFitWidth
一起使用橄仍。