iOS螢幕適配教程(手動布局和自動布局)

2021-07-16 06:17:35 字數 3276 閱讀 4386

ios螢幕適配教程

1.通過frame進行適配

在ios早期開發,都是使用frame屬性進行螢幕適配,需要多套**,非常麻煩。

//

使用frame新增控制項view,並設定屬性,但是只能使用指定螢幕尺寸

[super didreceivememorywarning];

uiview *greenview=[[uiview alloc]init];

greenview.frame=cgrectmake(20, 20, 20, 20

); greenview.backgroundcolor=[uicolor greencolor];

[self.view addsubview:greenview];

2.autoresizing實現適配

隨著ios的發展,後期蘋果公司新增了autoresizing功能,用來約束父子控制項之間的關係,以父控制項作為參照進行設定,設定相應的引數。相應可用拖拽來實現,下面列出用**實現的方法

//

設定兩個view,通過**實現兩個view(blueview,redview)一起變化

@inte***ce

viewcontroller ()

@property(nonatomic,weak)uiview *blueview;

//此處宣告redview父控制項blueview

@end

@implementation

viewcontroller

- (void

)viewdidload

@end

3.aotolayout實現適配

因為autorezing不能設定同級控制項之間的關係,假設在豎屏下, 螢幕底部有兩個按鈕, 這兩個按鈕的間距為乙個固定的值(寬度不指定); 當切換為橫屏的時候要求這兩個按鈕還顯示在螢幕底部, 並且按鈕間的間距不變, 按鈕可以隨之變寬,通過autorezing是無法實現的,所以在ios6之後,蘋果公司推出aotolayout,既可以設定父子控制項之間的關係也可以設定同級控制項之間的關係,一經推出便在ios7開始大規模使用。

aotolayout裡邊的兩個核心概念:約束和參照,一般乙個控制項確定位置需要四個約束,且這些約束都有相應參照的控制項。

在使用aotolayout設定控制項的時候,螢幕上控制項的的位置區域會有兩種顏色:

黃色:表示當前的顯示效果和實際效果不匹配,需要更新frame

紅色:表示約束不完整,約束衝突(表示兩個或者多個約束約束的效果不一致)

在開發的時候基本都是使用拖拽及設定引數的方法進行設定,相對較為簡單,本位就不加贅述,下面筆者通過**進行設定

1

//建立乙個藍色的view檢視

2 uiview*blueview=[[uiview alloc]init];

3 blueview.backgroundcolor=[uicolor bluecolor];

4[self.view addsubview:blueview];

因為autolayout和autoresizing不能重用,因此需要去掉autoresizing,所以可能新增約束的控制項

1

//去掉所以可能新增約束的控制項的autoresizing屬性

2 self.view.translatesautoresizingmaskintoconstraints=no;

3 blueview.translatesautoresizingmaskintoconstraints=no;

給控制項的屬性賦值 ,並新增在對應檢視上

//

設定left

nslayoutconstraint *leftblue=[nslayoutconstraint constraintwithitem:blueview attribute:nslayoutattributeleft relatedby:nslayoutrelationequal toitem:self.view attribute:nslayoutattributeleft multiplier:1.0 constant:20

];//

設定right

nslayoutconstraint *rightblue=[nslayoutconstraint constraintwithitem:blueview attribute:nslayoutattributeright relatedby:nslayoutrelationequal toitem:self.view attribute:nslayoutattributeright multiplier:1.0 constant:-20

];

//設定top

nslayoutconstraint *topblue=[nslayoutconstraint constraintwithitem:blueview attribute:nslayoutattributetop relatedby:nslayoutrelationequal toitem:self.view attribute:nslayoutattributetop multiplier:1.0 constant:30

];//

設定height

nslayoutconstraint *heighblue=[nslayoutconstraint constraintwithitem:blueview attribute:nslayoutattributeheight relatedby:nslayoutrelationequal toitem:nil attribute:nslayoutattributenotanattribute multiplier:0 constant:30

];//

新增到對應參照控制項上

[self.view addconstraints:@[leftblue,rightblue,topblue]];

[blueview addconstraint:heightblue];

可以看到,通過**實現autolayout方法非常麻煩,因此通過拖拽建立相對方便快捷,但是在做一些支付資訊,密碼保護等功能的時候,盡量使用**進行建立。

4.通過sizeclass進行適配

因為autolayout不能滿足設定一套約束,在所有的螢幕都適配,所以出現了sizeclass,size用來區分螢幕

sizeclass中把寬高各分成了三種型別regualr,compact,any,當寬度和高度各是某種型別的時候,就會確定某一類螢幕,當寬高均為any的時候,即可適配所有螢幕。所以確定九類螢幕,只是不螢幕進行了區分,具體的約束關係,但是具體的實現還需要autolayout來實現。

iOS布局和螢幕適配的一點總結

我不知道有沒有更好的辦法,我們的做法是根據裝置型別,寫一些if.else,或者switch語句 判斷機型可以使用screen的height 不能使用width,因為4和5的width是一樣的,都是320 也可以使用api裡的巨集,都差不多。我個人感覺,if.else似乎是不可避免的,雖然有auto ...

iOS布局和螢幕適配的一點總結

曾經,ios開發是不需要考慮螢幕適配問題的,因為只有一種螢幕尺寸。而現在已經有了4種螢幕,4,5,6,6p,因此螢幕適配也成了ios開發中必須考慮的問題。並且,這4種螢幕的寬高比全部都不一樣,所以簡單的按比例縮放並不能解決問題。我們最近做的乙個app也處理了螢幕適配,本文簡單總結一下 我不知道有沒有...

iOS裝置螢幕尺寸和適配

裝置 資源解析度 畫素 ui 設計解析度 點 程式開發 螢幕解析度 畫素 說明 iphone6p 6sp 2208 1242 736 414 1920 1080 3x,資源縮小1.15倍 401ppi iphone6 6s1334 750 667 375 1334 750 2x,326ppi iph...