【轉】iOS屏幕適配

来源:http://www.cnblogs.com/kerul-weiwei/archive/2016/07/14/screen_adaptation.html
-Advertisement-
Play Games

一、iOS屏幕適配發展歷程 設備適配技術 4及以前(iPad未出) 直接用代碼計算 有了iPad autoResizing 有不同屏幕的iPhone後 autoLayout 有更多不同屏幕的iPhone後 sizeClass 二、各個技術的特性 1、 直接用代碼計算 由於屏幕的大小都一樣,只有橫豎屏 ...


一、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.png

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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CSS3為我們帶來了令人驚嘆的新特性,而最有趣的就是CSS動畫。向大家推薦這50個CSS動畫集合可以讓你通過使用JavaScript函數來讓動畫更生動。為了能夠預覽到這些驚人的CSS3技術帶來的動畫特效,請大家使用如Safari和Chrome這類基於WebKit內核的瀏覽器。(IE瀏覽器謝絕觀賞~) ...
  • 方法一: // 計算系統當前是星期幾 var str = "今天是星期" + "日一二三四五六".charat(new date().getday()); 方法二: var a = new array("日", "一", "二", "三", "四", "五", "六"); var week = ne ...
  • 針對之前遇到過的一些特殊樣式的實現,我今天做個總結,目的有二:一是將這些方法記錄下來,以便將來需要用到時查找使用。二為將這些大神們智慧的結晶發揚光大,讓廣大前端程式猿們能夠少走彎路。此貼為更新帖,以後若有好的css樣式技巧,小哥我會不定期更新。 一、塊元素水平垂直居中(特別鳴謝:鑫生活。鑫哥出品必屬 ...
  • node.js越來越熱,應用的場景也越來越多。 但也因為是開源軟體,所以具備大多數開源軟體都存在的“版本問題”,版本發展很快,版本前後差異性大,老系統用新版本node跑不過,全局安裝的第三方組件和node版本相關造成全局版本混亂。 nvm是解決這一問題的利器。 nvm是node版本管理工具,主要特點 ...
  • 相信很多人只知道閉包這個詞但是具體是怎麼回事就不太清楚了,最近在群里有很多小伙伴討論這個問題但還是矇矓矓的趕腳。索性就寫了這篇文章來幫助大家一起理解閉包。 變數作用域 閉包其實想明白了很簡單,但是在理解閉包之前,我們先溫習一下作用域的概念不多說 直接上代碼來的直接 全局變數 局部變數 我們大家都知道 ...
  • 關鍵代碼如下: public class MainActivity extends Activity { private String msg="Android: "; /** * Called when the activity is first created. */ @Override pro ...
  • 第一種:(iOS8以後可用) 在Xib或stroyboard中(代碼也可以) 利用AutoLayout設置好label的約束(比如可以設置四個邊都距離屏幕50等方式,必須四個邊都要固定好)。 在代碼部分: 預估cell的高度,然後設置cell的高度自動調整尺寸即可,代碼如下: 第二種:bouding ...
  • tip 1 : 給UIImage添加毛玻璃效果 func blurImage(value:NSNumber) -> UIImage { let context = CIContext(options:[KCIContextUseSoftwareRenderer:true]) let ciImage ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...