iOS-界面布局自動(dòng)適配

近期需要對(duì)舊的一個(gè)App的界面進(jìn)行UI改造,要求效果圖在不同分辨率(iPhone,iPad)下能保持相同的顯示比例效果。大屏幕下的按鈕,字體要相應(yīng)的變大。

  • 不堪入目的舊界面
    origin.png
  • 改版后的新面孔
    new.png
一,原布局存在問題
  • 圖片的固定尺寸導(dǎo)致在大屏中顯示太小
  • 字號(hào)在不同分辨率中不能很好的轉(zhuǎn)換
  • 布局采用固定數(shù)值的尺寸導(dǎo)致大屏整體的顯示效果錯(cuò)亂
二,原因
圖片.png

上圖為蘋果設(shè)備的分辨率,對(duì)開發(fā)者而言,往往只要關(guān)注設(shè)備的邏輯分辨率(pt),很長(zhǎng)一段時(shí)間編寫界面都是以邏輯分辨率大小編寫,例如以320寬來計(jì)算尺寸以及布局,常有如下硬編碼:

UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 160)];

在顯示時(shí)系統(tǒng)會(huì)根據(jù)不同機(jī)型的縮放因子自動(dòng)轉(zhuǎn)換成對(duì)應(yīng)的屏幕分辨率。以iPhone5為例,160的寬度轉(zhuǎn)換后大概占屏幕的一半,但對(duì)于分辨率是1024的iPad,實(shí)際顯示的寬度比例不到20%了。同理,xib構(gòu)建的界面,如果約束采用的是固定值,也一樣會(huì)出現(xiàn)類似問題

三,界面如何適配iPhone,iPad

想要在iPhone,iPad的中顯示效果一致,達(dá)到同比放大的視覺效果,就是如何處理好字體,間距,控件大小的等比例縮放問題。核心思路就是避免寫死的數(shù)值硬編碼

1: 代碼構(gòu)建的界面使用比例布局
    [editView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view);
        make.width.equalTo(self.view.mas_width).multipliedBy(0.7);
        make.height.equalTo(self.view.mas_width).multipliedBy(0.7*0.7); 
    }];
2: xib構(gòu)建的界面約束采用百分比布局布局
  • view的寬度:設(shè)置相對(duì)于容器寬度的百分比
    圖片.png
  • view固定寬高比:設(shè)定其 Aspect Ratio
    圖片.png
  • view與父容器邊距:View.Leading 與 Superview.Leading 間距占 Superview.Width 的百分比
    圖片.png
3:字體等比自動(dòng)適配

以UI給的尺寸圖iPhone6/6s(375*667)為例,獲取屏幕的最長(zhǎng)邊,通過比例換算最終的字體大小,定義宏

#define SCREEN_HEIGHT MAX([UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width)
#define font(R) (R)*(SCREEN_HEIGHT)/667
// 如果是xib中的控件,則需在awakeFromNib中設(shè)置即可
label.font = [UIFont systemFontOfSize: font(11)];

調(diào)整后效果如開頭所示

參考

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

相關(guān)閱讀更多精彩內(nèi)容

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