麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

iOS-Autolayout自動布局

2019-11-14 19:31:23
字體:
來源:轉載
供稿:網友

1.前言  

•在iOS程序中,大部分視圖控制器都包含了大量的代碼用于設置UI布局,設置控件的水平或垂直位置,以確保組件在不同版本的iOS中都能得到合理的布局
•甚至有些程序員希望在不同的設備使用相同的視圖控制器,這就給代碼添加了更多的復雜性!
•自動布局AutoLayout的引入很好地解決了這一問題!
 
 

2.什么是AutoLayout  

AutoLayout是一種基于約束的,描述性的布局系統
–基于約束:和以往定義frame的位置和尺寸不同,AutoLayout的位置確定是以所謂相對位置的約束來定義的,比如x坐標為superView的中心,y坐標為屏幕底部上方10像素等
–描述性:約束的定義和各個view的關系使用接近自然語言或者可視化語言的方法來進行描述
–布局系統:用來負責界面的各個元素的位置
•AutoLayout為開發者提供了一種不同于傳統對于UI元素位置指定的布局方法。以前,不論是在IB里拖放,還是在代碼中寫,每個UIView都會有自己的frame屬性,來定義其在當前視圖中的位置和尺寸。而使用AutoLayout,就變為了使用約束條件來定義view的位置和尺寸
 

3.AutoLayout的優勢  

•解決不同分辨率和屏幕尺寸下view的適配問題,同時也簡化了旋轉時view的位置的定義。原來在底部之上10像素居中的view,不論在旋轉屏幕或是更換設備(ipad、iPad mini、iPhone 4或者是iPhone5/iPhone6/iPhone6plus)的時候,始終還在底部之上10像素居中的位置,不會發生變化
•使用約束條件來描述布局,view的frame會依據這些約束來進行計算
 

4.AutoLayout和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時將優先按照滿足優先級高的條件進行計算
 

5.AutoLayout的基本使用  

•在創建約束之后,需要將其添加到作用的view上。在添加時要注意目標view需要遵循以下規則
•1)  對于兩個同層級view之間的約束關系,添加到他們的父view上
•2)   對于兩個不同層級view之間的約束關系,添加到他們最近的共同父view上
•3)  對于有層次關系的兩個view之間的約束關系,添加到層次較高的父view上
 

6.添加和刷新約束(代碼)  

 

-(void)addConstraint:(NSLayoutConstraint *)constraint

 

 •刷新約束的改變

 

-setNeedsUpdateConstraints

 

-layoutIfNeeded

 


[button setTranslatesAutoresizingMaskIntoConstraints:NO];

 

 

// 2.1 水平方向的約束NSLayoutConstraint *constraintX = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f];[self.view addConstraint:constraintX];// 2.2 垂直方向的約束NSLayoutConstraint *constraintY = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f];[self.view addConstraint:constraintY];

 

 

6.使用AutoLayout容易出現的錯誤 

•Ambiguous Layout 布局不能確定,即給出的約束條件無法唯一確定一種布局,也就是約束條件不足,無法得到唯一的布局結果。這種情況一般添加一些必要的約束或者調整優先級可以解決
•Unsatisfiable Constraints 無法滿足約束,問題來源是有約束條件互相沖突,因此無法同時滿足,需要刪掉一些約束
•現在使用IB可以比較容易地完成復雜約束,在實際開發中很少再會遇到遺漏或者多余約束情況的出現,有問題的約束條件將直接在IB中得到錯誤或者警告。
 
作者: 清澈Saup
出處: http://www.companysz.com/qingche/
本文版權歸作者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。

 

 

 

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费视频xxxx | 美女黄视频在线观看 | 黄网站在线免费 | 九九热精品视频在线 | 欧美77| 免费香蕉成视频成人网 | 草久视频在线观看 | 中文字幕国 | 一区二区三区欧美在线观看 | 91久久久久久久久久久久久久 | 毛片在线视频免费观看 | 99精品视频在线 | 精品一区二区三区毛片 | 羞羞电影网 | 久草热久草视频 | 免费国产视频大全入口 | 久国久产久精永久网页 | 一级黄色免费大片 | 久久久国产精品网站 | 2级毛片| 久久影院免费观看 | 羞羞视频免费网站男男 | www.国产一区.com | 久久精品a一级国产免视看成人 | 欧美激情首页 | 久久久久久久久久久久免费 | 一级免费 | 久久久噜噜噜久久熟有声小说 | www.91视频com | 日韩视频在线观看免费视频 | 毛片视频网址 | 精品亚洲夜色av98在线观看 | 伊人午夜视频 | 日本黄色一级毛片 | 亚洲国产网站 | h视频在线播放 | 韩国精品一区二区三区四区五区 | av在线一区二区三区四区 | a黄色片 | 99欧美视频| 日本免费一区二区三区四区 |