iOS 屏幕適配

一、iOS屏幕適配發(fā)展歷程


? ? ? ? ? ? ? ? ? ? ?設(shè)備 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 適配技術(shù)

4 及以前(iPad未出) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 直接用代碼計(jì)算

有了iPad ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? autoResizing

有不同屏幕的 iPhone 之后 ? ? ? ? ? ? ? ? ? ? ? ? autoLayout

有更多不同屏幕的iPhone之后 ? ? ? ? ? ? ? ? ? ? ? sizeClass


二、各個(gè)技術(shù)的特性

1、直接用代碼計(jì)算

由于屏幕的大小都一樣,只有橫豎屏的情況,可以直接計(jì)算

2、autoResizing

適合于控件和其父控件的關(guān)系

、各屬性的解釋

屬性 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?解釋

UIViewAutoresizingNone ? ? ? ? ? ? ? ? ?不會(huì)隨著父試圖的改變而改變

UIViewAutoresizingFlexibleLeftMargin ?自動(dòng)調(diào)整view與父試圖做邊距,以保證右邊距不變

UIViewAutoresizingFlexibleRightMargin ? 自動(dòng)調(diào)整view與父試圖右邊距,以保證做邊距不變

UIViewAutoresizingFlexibleTopMargin ? ? 自動(dòng)調(diào)整view 與父試圖上邊距,以保證下邊距不變

UIViewAutoresizingFlexibleBottomMargin 自動(dòng)調(diào)整view與父試圖下邊距,以保證上邊距不變

UIViewAutoresizingFlexibleWidth ? ? ? ? ? ? ? 自動(dòng)調(diào)整view的寬度,保證左邊距和右邊距不變

UIViewAutoresizingFlexibleHeight ? ? ? ? ? ? ? 自動(dòng)調(diào)整view的高度,保證上邊距和下邊距不變

* view 的 autoresizesSubViews屬性為YES 時(shí)(默認(rèn)為YES),autoresizing才會(huì)有效

* 從Xcode6開始 Storyboard & Xib默認(rèn)是自動(dòng)布局,因此我們需要手動(dòng)調(diào)整才能使用autoresizing?

* auroresizing 可以組合使用,eg: UIViewAutoResizingFlexibleWidth | UIViewAutoResizingFlexibleBottonMargin

3、auroLayout

幫我們確定在不同設(shè)備、不同(父view環(huán)境下,同一個(gè)可視單元所應(yīng)具有的合適位置和尺寸(任何兩個(gè)試圖的關(guān)系都可以確定)

*autoLayout 的用法:

? ? ? ? *直接建立約束條件

[self.view addConstraint:[NSLayoutContranit constraintWithItem:blueView ?

arrtibutes:NSLayoutAttributeLeft?

relatedBy:NSLayoutRelationEqual

toItem:redView

attribute:NSLayoutAttributeLeft

multiplier:1

constant:0]];

這樣雖然代碼量比較大,但是是絕對(duì)可行的辦法,也是使用autoLayout最根本的辦法之一。

*使用VFL語言

- (void) viewDidLoad{

[super viewDidLoad];

UIButton *button = [UIButton alloc] init];

[button setTitle:@"點(diǎn)擊一下“ forState:UIControllStateNormal];

button.translatesAutoresizingMaskIntoConstraints = NO;

[button setBackgroundColor:[UIColor blackColor]];

[self.view addSubView:button];

NSArray *constraints1 = [NSLayoutConstraint constraintsWithVisualFormat:@"@H:|-[button]-|"

options:0

metrics:nil

views:NSDictionaryOfVariableBindings(button)];

NSArray *constrains2 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[button(==30)];

options:0

metrics:nil

views:NSDictionaryOfVariableBindings(button)];

[selfview addConstraints :constraints1];

[self.view addConstraints:constraints2];

*使用第三方庫(kù)如: Masonry、 UIView + AutoLayout ...

*autoLayout的好處

1)、你基本上可不用考慮3.5寸和4寸以及即將上市的x.x寸屏幕不同分辨率的問題,你終于可以不用在viewDidLoad方法里判斷不同分辨率下,不同空間應(yīng)放在哪里,或者針對(duì)不同分辨率寫不同的storyboard和xib;

2)、你可以拋棄那些根據(jù)不同文字來計(jì)算tableView、UILable高度的代碼了,因?yàn)閍utolayout會(huì)幫你自動(dòng)計(jì)算好;

3)、如果你的布局在橫屏豎屏下變化不是特別大,你不用再為橫著豎著寫兩套代碼或者寫兩個(gè)storyboard / xib 了;

4、sizeClass

在iOS8中,新增了Size Classes 特性,它是對(duì)當(dāng)前所有iOS設(shè)備尺寸的一個(gè)抽象。那我們就把屏幕的寬和高分成三種情況: Compact:緊湊、Regular:寬松、Any:任意.

這樣寬和高三三一整合,一共9種情況。如下圖所示,針對(duì)每一種情況。我們可以再每種情況下設(shè)置不同的布局(包括控件的屬性,甚至是空間是否顯示)

對(duì) sizeClass的理解

sizeClass 的實(shí)質(zhì)是將iOS屏幕分成了不同的抽象概念,這些不同的抽象組合,對(duì)應(yīng)著不同的設(shè)備屏幕。所以,利用sizeClass 可以針對(duì)同一套UI,來適配所有的屏幕。之一:這些所有的適配,都是利用autoLayout來實(shí)現(xiàn)的,sizeClass只是負(fù)責(zé)提供不同的屏幕尺寸。

最后編輯于
?著作權(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)容

  • 一、iOS屏幕適配發(fā)展歷程 二、各個(gè)技術(shù)的特性 1、 直接用代碼計(jì)算 由于屏幕的大小都一樣,只有橫豎屏的情況,可以...
    Ljson閱讀 20,077評(píng)論 10 58
  • 前言 iPhone自誕生以來,隨著其屏幕尺寸不斷的多樣化,屏幕適配的技術(shù)一直在發(fā)展更新。目前,iOS系統(tǒng)版本已經(jīng)更...
    VV木公子閱讀 15,621評(píng)論 24 170
  • 簡(jiǎn)介: 1.在以前的IOS程序中,是如何設(shè)置布局UI界面的?解決方式:(1)經(jīng)常編寫大量的坐標(biāo),計(jì)算代碼(2)為了...
    IIronMan閱讀 619評(píng)論 1 2
  • 跟正在看這些文字的你一樣,我也覺得這是我今生寫過的最無趣的題目,不過,以人民的名義負(fù)責(zé)任地說,這里記錄的卻是我有生...
    楊明潔閱讀 352評(píng)論 2 1
  • 依然無話
    婧宸小狐閱讀 201評(píng)論 0 0

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