iOS螢幕適配,ios螢幕適配

來源:互聯網
上載者:User

【轉】iOS螢幕適配,ios螢幕適配
一、iOS螢幕適配發展曆程

裝置 適配技術
4及以前(iPad未出 直接用代碼計算
有了iPad autoResizing
有不同螢幕的iPhone後 autoLayout
有更多不同螢幕的iPhone後 sizeClass
二、各個技術的特性1、 直接用代碼計算

由於螢幕的大小都一樣,只有橫豎屏的情況,可以直接計算

2、 autoResizing

適合於控制項與其父控制項的關係

各屬性的解釋

屬性 解釋
UIViewAutoresizingNone 不會隨父視圖的改變而改變
UIViewAutoresizingFlexibleLeftMargin 自動調整view與父視圖左邊距,以保證右邊距不變
UIViewAutoresizingFlexibleWidth 自動調整view的寬度,保證左邊距和右邊距不變
UIViewAutoresizingFlexibleRightMargin 自動調整view與父視圖右邊距,以保證左邊距不變
UIViewAutoresizingFlexibleTopMargin 自動調整view與父視圖上邊距,以保證下邊距不變
UIViewAutoresizingFlexibleHeight 自動調整view的高度,以保證上邊距和下邊距不變
UIViewAutoresizingFlexibleBottomMargin 自動調整view與父視圖的下邊距,以保證上邊距不變
  • view的autoresizesSubviews屬性為yes時(預設為yes),autoresizing才會生效。
  • 從XCODE6開始,Storyboard&Xib預設是自動布局,因此我們需要手動調整,才能使用autoresizing。
  • autoresizing可以組合使用,如:
    UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin
3、autoLayout

幫我們確定在不同裝置、不同(父view)環境下,同一個可視單元所應具有合適的位置和尺寸(任何兩個視圖的關係都可以確定)

1. autoLayout的用法:

  • 直接建立約束條件
         [self.view addConstraint: [NSLayoutConstraint constraintWithItem:blueView         attribute:NSLayoutAttributeLeft         relatedBy:NSLayoutRelationEqual            toItem:redView         attribute:NSLayoutAttributeLeft        multiplier:1          constant:0]];
    這樣雖然代碼量比較大,但是是絕對可行的辦法,也是使用autoLayout最根本的辦法之一。
  • 使用VFL語言
    - (void)viewDidLoad {  [super viewDidLoad];  UIButton *button=[[UIButton alloc]init];  [button setTitle:@"點擊一下" forState:UIControlStateNormal];  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 *constraints2=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[button(==30)]"                      options:0                      metrics:nil                        views:NSDictionaryOfVariableBindings(button)];  [self.view addConstraints:constraints1];  [self.view addConstraints:constraints2];          }

     

     
  • 使用使用第三方庫,如:MasonryUIView+AutoLayout……
2. autoLayout的好處:
  • 你基本上可以不用考慮3.5寸和4寸以及即將上市的x.x寸螢幕不同解析度的問題,你終於可以不用在viewDidLoad方法裡判斷不同解析度下,不同控制項應該放在哪裡,或者針對不同解析度寫不同的storyboard和xib;
  • 你可以拋棄那些根據不同文字來計算tableViewCell、UILabel高度的代碼了,因為autolayout會幫你自動計算好;
  • 如果你的布局在橫屏豎屏下變化不是特別大,你不用再為橫著豎著寫兩套代碼或者寫兩個storyboard/xib了;
4、sizeClass

在iOS8中,新增了Size Classes特性,它是對當前所有iOS裝置尺寸的一個抽象。那我們就只把螢幕的寬和高分別分成三種情況:Compact:緊湊、Regular:寬鬆、Any:任意。

這樣寬和高三三一整合,一共9中情況。如所示,針對每一種情況。我們可以在每種情況下設定不同的布局(包括控制項的約束,甚至是控制項是否顯示)


sizeClass.png

對sizeClass的理解:
sizeClass的實質是將iOS螢幕分成了不同的抽象概念,這些不同的抽象組合,對應著不同的裝置螢幕。所以,利用sizeClass可以針對同一套UI,來適配所有的螢幕。注意:這些所有的適配,都是利用autoLayout來實現的,sizeClass只是負責提供不同的螢幕尺寸。

原文地址:http://www.jianshu.com/p/10d7038c78ae

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.