背景
公司產品需要自定義彈窗。而彈窗的背景圖片是根據屏幕的寬高自動縮放的,如下:
#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 模擬器上效果如下:
以下是iPhone 11 模擬器下的效果:
簡單點說,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)];
效果如下:
然後我們在切換回iPhone 6s 模擬器下:
大體一致了,類似的實現還可以定義寬度和字體:
#define gotWidth(w) ((w)*([UIScreen mainScreen].bounds.size.height/896.0f))
#define fontHeight(f) ((f)*([UIScreen mainScreen].bounds.size.width/414.0f))