iOS | 圖片上的文字自適應

背景

公司產品需要自定義彈窗。而彈窗的背景圖片是根據屏幕的寬高自動縮放的,如下:

#define ALERTVIEW_HEIGHT ([UIScreen mainScreen].bounds.size.width - 60)*1.05
#define ALERTVIEW_WIDTH  [UIScreen mainScreen].bounds.size.width-60

而彈窗上的標題,即‘恭喜’兩個字並不是圖片,是寫上去的,代碼如下:

UILabel *titleLab = [[UILabel alloc]initWithFrame:CGRectMake(10, 38, self.alertView.frame.size.width - MARGIN, 30)];

這裏我給了它距離彈框頂部一個固定的間距,iPhone 6s 模擬器上效果如下:
@iPhone6s-fixed| center | 75x133.4

以下是iPhone 11 模擬器下的效果:iPhone11-fixed

簡單點說,iPhone11下字體上移了。這個固定的尺寸不隨屏幕的寬高呈現比例變化,那我們如何定義它的高度,以便標題在不同屏幕尺寸下都在中間位置呢。

實現動態高度

此時我們引入一個計算動態高度的宏定義:

#define getHeight(h) ((h)*([UIScreen mainScreen].bounds.size.width/414.0f))

在iPhone 11上調試一個合適的高度,這裏不再是固定高度,而是使用了剛剛定義的宏動態高度getHeight(40)

 UILabel *titleLab = [[UILabel alloc]initWithFrame:CGRectMake(10, getHeight(40), self.alertView.frame.size.width - MARGIN, 30)];

效果如下:
iPhone11-adaptivity

然後我們在切換回iPhone 6s 模擬器下:
iPhone6s-adaptivity

大體一致了,類似的實現還可以定義寬度和字體:

#define gotWidth(w) ((w)*([UIScreen mainScreen].bounds.size.height/896.0f))
#define fontHeight(f) ((f)*([UIScreen mainScreen].bounds.size.width/414.0f))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章