iOS開發螢幕適配,純程式碼是如何?的?

來源:互聯網
上載者:User
【iOS開發】多屏尺的自動適配 AutoLayout (純程式碼方式)   (2014-09-19 09:35:47) 轉載▼
標籤:  autolayout   ios開發   xcode   ui 分類: Xcode/iOS/MacOS
關於AutoLayout,最早從iOS6開始引入使用。
主要功能是使用約束,對視圖進行相對布局,以適應不同屏尺的變換。
網上大量的資料都在介紹xib和storyboard,如何使用AutoLayout,說純程式碼使用AutoLayout進行UI布局的越來越少。對於我這個習慣了代碼UI布局的人,寫個備忘:
AutoLayout是什麼。 使用一句Apple的官方定義的話 AutoLayout是一種基於約束的,描述性的布局系統。 Auto Layout Is a Constraint-Based, Descriptive Layout System. 關鍵詞: 基於約束 - 和以往定義frame的位置和尺寸不同,AutoLayout的位置確定是以所謂相對位置的約束來定義的,比如x座標為superView的中心,y座標為螢幕底部上方10像素等 描述性 - 約束的定義和各個view的關係使用接近自然語言或者可視化語言(稍後會提到)的方法來進行描述 布局系統 - 即字面意思,用來負責介面的各個元素的位置。 總而言之,AutoLayout為開發人員提供了一種不同於傳統對於UI元素位置指定的布局方法。以前,不論是在IB裡拖放,還是在代碼中寫,每個UIView都會有自己的frame屬性,來定義其在當前視圖中的位置和尺寸。使用AutoLayout的話,就變為了使用約束條件來定義view的位置和尺寸。這樣的 最大好處是一舉解決了不同解析度和螢幕尺寸下view的適配問題,另外也簡化了旋轉時view的位置的定義 ,原來在底部之上10像素置中的view,不論在旋轉螢幕或是更換裝置(iPad或者iPhone5或者以後可能出現的mini iPad)的時候,始終還在底部之上10像素置中的位置,不會發生變化。 總結 使用約束條件來描述布局,view的frame會依據這些約束來進行計算 Describe the layout with constraints, and frames are calculated automatically. AutoLayout和Autoresizing Mask的區別 Autoresizing Mask是我們的老朋友了…如果你以前一直是代碼寫UI的話,你肯定寫過UIViewAutoresizingFlexibleWidth之類的枚舉;如果你以前用IB比較多的話,一定注意到過每個view的size inspector中都有一個紅色線條的Autoresizing的指標和相應的動畫縮放的示意圖,這就是Autoresizing Mask。在iOS6之前,關於旋轉螢幕的適配和iPhone,iPad螢幕的自動適配,基本都是由Autoresizing Mask來完成的。但是隨著大家對iOS app的要求越來越高,以及已經以及今後可能出現的多種螢幕和解析度的裝置來說,Autoresizing Mask顯得有些落伍和遲鈍了。AutoLayout可以完成所有原來Autoresizing Mask能完成的工作,同時還能夠勝任一些原來無法完成的任務,其中包括: AutoLayout可以指定任意兩個view的相對位置,而不需要像Autoresizing Mask那樣需要兩個view在直系的view hierarchy中。 AutoLayout不必須指定相等關係的約束,它可以指定非相等約束(大於或者小於等);而Autoresizing Mask所能做的布局只能是相等條件的。 AutoLayout可以指定約束的優先順序,計算frame時將優先按照滿足優先順序高的條件進行計算。 總結 Autoresizing Mask是AutoLayout的子集,任何可以用Autoresizing Mask完成的工作都可以用AutoLayout完成。AutoLayout還具備一些Autoresizing Mask不具備的優良特性,以協助我們更方便地構建介面。 AutoLayout基本使用方法 Interface Builder 這部分網上大量的教程,都是說的這個
手動使用API添加約束 建立 iOS6中新加入了一個類:NSLayoutConstraint,一個形如這樣的約束 item1.attribute = multiplier ? item2.attribute + constant 對應的代碼為
1 [NSLayoutConstraint constraintWithItem:button
2                              attribute:NSLayoutAttributeBottom
3                              relatedBy:NSLayoutRelationEqua
4                                 toItem:superview
5                              attribute:NSLayoutAttributeBottom
6                             multiplier:1.0
7                               constant:-padding]
這對應的約束是“button的底部(y) = superview的底部 -10”。 添加 在建立約束之後,需要將其添加到作用的view上。UIView(當然NSView也一樣)加入了一個新的執行個體方法: -(void)addConstraint:(NSLayoutConstraint *)constraint; 用來將約束添加到view。在添加時唯一要注意的是添加的目標view要遵循以下規則: 對於兩個同層級view之間的約束關係,添加到他們的父view上  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.