iOS textView字號自適應(yīng)大小

需求:每行15個字,左右間距固定大小。根據(jù)寬度自動適配字體大小:即屏幕越寬,字號越大;屏幕小,則字號越小。

1.根據(jù)寬度計算字號方法
//根據(jù)不同屏幕寬度去適應(yīng)字號大小

- (CGFloat)calcuateFontSizeFromWidth:(NSString *)text{
    self.calculateTextView.frame = CGRectMake(0, -20, 0, 35.5);
    self.calculateTextView.text = text;
    CGFloat fontSize = 22;
    
    CGFloat fixedWidth = MAXFLOAT;
    CFTimeInterval startTimeInterval = CACurrentMediaTime();
    while (fixedWidth>SCREEN_WIDTH-34*2) {
        self.calculateTextView.font = [UIFont systemFontOfSize:fontSize];
        fixedWidth = [self.calculateTextView sizeThatFits:CGSizeMake(MAXFLOAT, 50)].width;
        fontSize = fontSize-0.5;
    }
    CMLogDebug(@"calcuateFontSizeFromWidth %.2f",CACurrentMediaTime() - startTimeInterval);
    return MAX(fontSize, 0);
    
}

2.按每行15個字寬度調(diào)用,得出字號大小

CGFloat fontSize = [self calcuateFontSizeFromWidth:NSLocalizedString(@"onesentence_fifteenWord", nil)];

3.高度也需要計算,如果是固定高度,字號過大可能會導(dǎo)致字體顯示不全

- (CGFloat)calcuateLineHeight{
    self.calculateTextView.frame = CGRectMake(0, -20, SCREEN_WIDTH-34*2, MAXFLOAT);
    self.calculateTextView.font = [UIFont systemFontOfSize:self.fontSize];
    self.calculateTextView.text = NSLocalizedString(@"onesentence_fifteenWord", nil);
    CGFloat height = [self.calculateTextView sizeThatFits:CGSizeMake(SCREEN_WIDTH-34*2, MAXFLOAT)].height;
    return height;
}

總結(jié):
1.iOS的TextView都需要自己實現(xiàn),Android都是系統(tǒng)屬性,羨慕的不行。
2.計算TextView的寬度和高度沒有那個方法準確,只有在屏幕外寫一個TextView用于計算,這樣也不改變需要展示TextView的text。

有任何問題歡迎留言交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容