AutoLayout(自動佈局)

来源:http://www.cnblogs.com/longyongping/archive/2017/05/31/6925194.html
-Advertisement-
Play Games

1. iOS兩種自適應佈局方式:(修正說明:) -AutoLayout(自動佈局) + SizeClasses(尺寸類別) -Autoresizing (自動調整尺寸/彈簧式調整尺寸) 前者 AutoLayout 是從iOS6出現,通過創建視圖約束實現自適應,SizeClasses是iOS8 開始出 ...


1. iOS兩種自適應佈局方式:(修正說明:)       -AutoLayout(自動佈局) + SizeClasses(尺寸類別)        -Autoresizing (自動調整尺寸/彈簧式調整尺寸)        前者 AutoLayout 是從iOS6出現,通過創建視圖約束實現自適應,SizeClasses是iOS8 開始出現,用於配合AutoLayout使用,為解決所有(包括iPhone,iPad)iOS設備屏幕尺寸和屏幕旋轉時UI的適配。        後者是早期開發使用的適配界面的方式,現在仍然保留。通過彈簧式調整控制項尺寸,使其適應屏幕的尺寸變化。        蘋果官方建議使用AutoLayout。        Autoresizing 缺點:        > 其描述界面變化規則不夠靈活,很多變化規則根本無法精確描述。autoresizingMask縮放比例是UIKit內部計算的,開發者無法指定縮放比例的精確值。  
  •      > 變化規則只能基於父視圖與子視圖之間,無法建立同級視圖或者跨級視圖之間的關係。
     AutoLayout 的核心原理:        > view具有自我計算尺寸,佈局的能力。通過它自身的內容,能夠得到尺寸。        > view的佈局位置,確定於它與superview及其他view的關係。         > 與傳統的autoresizingmask自適應相比,AutoLayout更精確,能絕對的確定view的佈局。        > view不一定需要一個初始的rect。AutoLayout中,view如果有足夠的constraint,便可以確定自己的尺寸和位置,並且知道自己和其他view的關係。即,想確定view的佈局,就給它(們)添加constraint。       2. AutoLayout 自動佈局 有三種方式:       > 在Xcode 可視化界面 Interface Builder 中右下角添加並設置約束       > 純代碼添加約束       > 純代碼通過可視化格式語言VFL(Visual Format Language) 添加約束       2.1 可視化設置約束        Interface Builder中,右下角,依次是Alignment(佈局),Pin(固定),Resolve(解決約束錯誤)        以下列出三項中常用的項        Alignment: Horizontally in Container  在容器中水平中心,值為0,設置其他值時,表示水平方向偏移中心位置量                        Vertially in Container 在容器中豎直中心,值為0,設置其他值時,表示水平方向偏移中心位置量        Pin:                上方四個值,從左側順時針依次是:                    Leading Space to Superview // 相對於父視圖的左間距 leading:首部                    Top Space to Superview       // 相對於父視圖的上間距                    Trailing Space to Superview  // 相對於父視圖的右間距 trailing:尾部                    Bottom Space to Superview  // 相對於父視圖的底間距              Width : 固定自身寬度              Height : 固定自身高度                            若要使多個視圖相同的寬度,高度,則先同時選中多個視圖,然後在Pin中選擇:              EqualWidths: 多個視圖相同寬度;EqualHeights: 多個視圖相同高度                    若要使兩個視圖水平方向或垂直方向上相互之間的距離固定,先選中其中一個視圖,同時按住鍵盤上control鍵,拉線到另一個視圖,在彈出框中:            選中 Horizontal Spacing (水平方向間距) 或 Vertical Spacing(豎直方向間距),然後在被選中視圖的Size Inspector(右側倒數第二個選項卡) 中Constraints 欄目下,如圖所示: 點擊“Edit”, 看左邊藍色的小圖來分辨 最下麵這個是兩個視圖之間的間距    高度距離50不會變。限定死的 彈出     在 constant中輸入固定間距值                                Resolve: 主要使用到 Clear Constraints 清除視圖的約束       2.2 純代碼設置約束        NSLayoutConstraint 佈局約束類        > 純代碼方式添加視圖,不指定frame(若可視化下添加其位置,大小對約束有影響,會產生衝突)        > 設置禁止自動尺寸轉換成約束,否則會產生約束衝突           被約束的視圖.translatesAutoresizingMaskIntoConstraints = NO           在可視化下Interface Builder 上預設設置就是關閉的        > 創建約束           [NSLayoutConstraint constraintWithItem:lb attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:100]           // 參數一:被約束的視圖:view1           // 參數二:指定在被約束的視圖哪個屬性上約束,位置或大小           // 參數三:被約束的視圖與參照視圖指定屬性之間的關係           // 參數四:參照視圖:view2           // 參數五:參照視圖的屬性           // 參數六: multiplier:被約束視圖指定屬性是參照視圖指定屬性的多少倍           // 參數七:被約束視圖的指定屬性需要加的浮點數 value           計算公式:view1.attr [=,>=,<=] view2.attr * multiplier + value;            > 添加約束           註意:約束是添加到參照視圖上。          [view2 addConstraint: ]            [擴展] 第三方庫實現約束 Masonry       官網: https://github.com/SnapKit/Masonry       2.3 VFL設置約束         通過 NSLayoutConstraint 類方法:         + (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(nullable NSDictionary<NSString *,id> *)metrics views:(NSDictionary<NSString *, id> *)views;        示例:        NSArray *constraints=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[button]-[button1(==height)]"                            options:0                            metrics:@{@"height":@30}                            views:NSDictionaryOfVariableBindings(button1,button2)];    
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉載自:http://blog.csdn.net/lun379292733/article/details/8169807/ <script type="text/JavaScript"> /* * 手機號碼格式 * 只允許以13、15、18開頭的號碼 * 如:13012345678、1592922 ...
  • 使用NodeJS & SocketIO & Express & EJS & MongoDB打造多人線上聊天室。 ...
  • IE6下有不少奇怪的Bug,今天就碰到一個,float:right換行bug,情況是併列的幾個塊級元素如div和span,一些設置了左浮動一些設置右浮動,一行的寬度足夠放下所有的塊級元素,但此時ie6則顯示右浮動的其中一塊換行了,下麵給出實例和解決方法: 實例說明下:html結構如下 <div> < ...
  • 介紹 sChart.js 作為一個小型簡單的圖表庫,沒有過多的圖表類型,只包含了柱狀圖、折線圖、餅狀圖和環形圖四種基本的圖表。麻雀雖小,五臟俱全。sChart.js 基本可以滿足這四種圖表的需求。而它的小,體現在它的體積上,代碼只有 8kb,如果經過伺服器的Gzip壓縮,那就更小了,因此不用擔心造成 ...
  • 本篇是在VPS上搭建Hexo靜態博客的第一篇博文,寫本篇的目的一是紀念一下,二是作為一個部署文檔保留。 "博客地址" 相關描述 VPS環境是在 "搬瓦工" 上安裝的centos6(x86),1核,512MB,10GB,1000GB/月的配置($19.99/年,可用支付寶支付),主要的功能是搭個梯子, ...
  • [1]路徑組成 [2]分隔符 [3]規範化 [4]絕對和相對 [5] [6] [7] ...
  • 用react一年多了.一直是在別人的影子下寫的代碼,他們也確實都是大神級的人物,不過,小菜鳥也有小菜鳥的思想~這不,今天就在重溫一遍react!記一些零碎的知識點~不知道對你們有沒有用,不過,對於我,絕對有用!所有的這些均參考於http://www.ruanyifeng.com/blog/2015/ ...
  • http://blog.csdn.net/chaozhung_no_l/article/details/49929177 轉自這位大神的博客,感謝這位大神,幫了大忙,謝謝!! ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...