999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

iOS Autolayout中的約束

2015-04-02 23:35:30李嵐李可嘉
科技創新與應用 2015年10期
關鍵詞:研究

李嵐 李可嘉

摘 要:iOS中的Autolayout技術用于解決UI可視單元或元素的布局和排列問題并且能夠可以完美的解決適配不同尺寸的屏幕以及解決橫豎屏的問題,讓編程不再枯燥無味,因此被越來越多的編程者所接受,Autolayout中的核心基礎是約束,介紹了Autolayout中約束的研究意義,約束的類型和優先級,ContentSize約束,約束的裝載方式和比較,最后對約束的使用提出了幾點建議。

關鍵詞:iOS;Autolayout;研究

1 Autolayout中約束的研究意義

Autolayout自動布局技術在iOS6就已經推出了,但是因為很多人一開始不習慣使用xib編程,而是堅持使用代碼布局控件,所以Autolayout并沒有普及的太快。但是現在隨著越來越多的人開始使用xib,怎樣適配橫豎屏和不同尺寸的屏幕,成了亟待解決的問題,好在兩年前就已經推出并且日臻完善的xib Autolayout技術可以完美的解決。對于Autolayout而言,最為核心的基礎就是約束。

2 Autolayout中約束的類型

對于Autolayout而言,最為核心的基礎就是約束,在iOS 中分別有以下幾類約束:

NSLayoutConstraint,開放類。幾乎是程序員最常用的約束。它用于設置view在view tree之間的關系,自身大小等。

NSContentSizeLayoutConstraint,私有類。用于衡量view內容和大小相關的約束。比如Hugging和Compression,控制view的內容顯示。

NSAutoresizingMaskLayoutConstraint,私有類。由Autosizing mask轉換到Autolayout系統中的約束表達。

_UILayoutSupportConstraint,私有類。布局支撐約束,它包括Top和Bottom的約束,用于控制view的顯示邊界,例如,它限制view的頂端顯示不會和狀態欄重合。

NSIBPrototypingLayoutConstraint,私有類。如果在Storyboard中添加了一個UI控件,且沒有在Storyboard中添加任何約束,但是標注了要使用Autolayout,那么在實際的運行期,系統會默認為它添加NSIBPrototypingLayoutConstraint約束。

NSContentSizeLayoutConstraint最主要的作用是和intrinsic size一起工作,通常這個約束和Layout約束共同決定view的顯示方式。

3 Autolayout中約束優先級

約束優先級通常是形容一個約束重要性的指標,兩個約束如果共同決定一個顯示屬性的顯示,當二者發生了抵觸的時候,優先級表示其中一個約束,相比另外一個而言,更加重要。優先級就是浮點數,通常用其整數表達。

4 ContentSize約束

Autolayout系統有根據顯示內容來自適應尺寸的能力。這個能力是由,Intrinsic Content Size內容大小、content hugging約束、content compression約束來共同決定。

Intrinsic Content Size保證了當view的內容變化后,自己適應內容的大小的描述。自定義View需要自己計算適合自己的intrinsic size。而imageview、label等含有內容控件(除了UITextView)都會自己計算“適合內容的Size”。

Content Hugging抗拉伸屬性。它其實是一個約束,它使得它本身的大小更加貼合顯示的內容。例如:如果一個UIView的內容顯示需要200的寬度,那么如果UIView本身有寬度約束(此約束設置寬度為400),此時若抗拉伸屬性的優先級比寬度約束要高,View本身的大小就不會變化,反之就會被拉伸。

Compression Resistance抗壓縮屬性。它的一切和抗拉伸相反。

Layout Constraints Layout約束是程序員必須熟悉的。一個線性公式就說明了它的意義:

view1.attr1=view2.attr2*multiplier + constant

這里=可以是>=,<=,<,>等。

剩余就是描述Layout Constraint的生成和裝載方式:

生成方式比如:Layout Constraints的描述方式可以是原生NSLayoutConstraint來實現,也可以是VFL,也可以是自己封裝的庫。

5 Autolayout中約束的裝載方式

(1)View形容它自己的約束(一元約束),添加到自己或者直系SuperView中。(2)View和View之間的約束,如果view之間是父子關系,添加到父親上。如果view和view是兄弟關系,則添加到他們共同的父親節點上。(3)View和View之間的約束,如果他們是兩個不同的分支上的,則需要把約束添加到他們共同的祖先上面。

6 Autolayout中約束的比較

通常而言,比較對象,需要比較一個對象的所有成員變量。如果一一相等,則表明他們相等。但是,對于約束而言,這個比較方式比較例外:除了優先級以外的參數都要一致,才是一樣的約束。也就是說優先級是不需要參與比較的。例如:

-(BOOL) isEqualToConstraint:(NSLayoutConstraint*) constraint

{

if (self.firstItem != constraint.firstItem) return NO;

if (self.secondItem != constraint.secondItem) return NO;

if (self.firstAttribute != constraint.firstAttribute) return NO;

if (self.secondAttribute != constraint.secondAttribute) return NO;

if (self.relation != constraint.relation) return NO;

if (self.multiplier != constraint.multiplier) return NO;

if (self.constant != constraint.constant) return NO;

return YES;

}

7 Autolayout中約束使用的幾個建議

(1)充分利用約束的優先級。不要把所有約束的優先級都設置成Require。(2)約束沒有順序而言。優先級越高越會得到滿足。(3)注意UpdateConstraint、Layoutsubview、DrawRect的順序,在這個管線中的特定階段做想自定義的事情。(4)注意約束描述的合理性,以避免自我矛盾的描述引起的Layout約束的沖突、歧義甚至崩潰。

參考文獻

[1]Erica Sadun ,iOS Auto Layout Demystified,Second Edition[M].Addison-Wesley Educational Publishers Inc; 2nd Revised edition ,2013.

[2]關東升.iOS開發指南:從零基礎到App Store上架(第2版)[M].人民郵電出版社,2014.

猜你喜歡
研究
FMS與YBT相關性的實證研究
2020年國內翻譯研究述評
遼代千人邑研究述論
視錯覺在平面設計中的應用與研究
科技傳播(2019年22期)2020-01-14 03:06:54
關于遼朝“一國兩制”研究的回顧與思考
EMA伺服控制系統研究
基于聲、光、磁、觸摸多功能控制的研究
電子制作(2018年11期)2018-08-04 03:26:04
新版C-NCAP側面碰撞假人損傷研究
關于反傾銷會計研究的思考
焊接膜層脫落的攻關研究
電子制作(2017年23期)2017-02-02 07:17:19
主站蜘蛛池模板: 久久人妻xunleige无码| 亚洲女同一区二区| 高h视频在线| 国产亚洲精品无码专| 国产午夜精品一区二区三区软件| 亚洲欧美自拍视频| 国产视频自拍一区| 亚洲国产日韩视频观看| 免费va国产在线观看| 99r在线精品视频在线播放| 高清不卡毛片| 三级欧美在线| 亚洲不卡无码av中文字幕| 欧洲成人免费视频| 91麻豆国产视频| 天天做天天爱天天爽综合区| 精品国产网| 国产精品久久精品| 精品久久国产综合精麻豆| 国产中文一区a级毛片视频| 在线a视频免费观看| 国产精品妖精视频| 玖玖免费视频在线观看| A级毛片无码久久精品免费| 亚洲精品视频免费看| 免费一级无码在线网站| 亚洲av日韩av制服丝袜| 免费看av在线网站网址| 亚洲综合香蕉| 国产麻豆精品久久一二三| 亚洲欧美一级一级a| 在线观看热码亚洲av每日更新| 国产AV无码专区亚洲A∨毛片| 久久久久夜色精品波多野结衣| 婷婷六月在线| 456亚洲人成高清在线| 99re热精品视频国产免费| 日韩乱码免费一区二区三区| 综合色婷婷| 亚洲精品桃花岛av在线| 国产毛片高清一级国语 | 久久一色本道亚洲| 精品国产黑色丝袜高跟鞋| 亚洲h视频在线| 丁香六月综合网| 国产成人91精品| 国产呦精品一区二区三区下载| 麻豆国产在线观看一区二区| 亚洲精品天堂在线观看| 亚洲第一精品福利| 国产精品久久久久婷婷五月| 97久久人人超碰国产精品| 欧美不卡二区| 亚洲av片在线免费观看| 黄色在线网| 免费一级无码在线网站| 2018日日摸夜夜添狠狠躁| 视频一本大道香蕉久在线播放 | 无码高潮喷水专区久久| 亚洲天堂日韩在线| 91破解版在线亚洲| 精品偷拍一区二区| 亚洲精品麻豆| 国产天天色| 欧美精品成人一区二区在线观看| 欧美高清国产| 日本草草视频在线观看| yy6080理论大片一级久久| 日韩AV手机在线观看蜜芽| 国产精品亚洲一区二区三区在线观看| 成人福利一区二区视频在线| 国产欧美又粗又猛又爽老| 中文字幕欧美日韩| 亚洲三级成人| 最新午夜男女福利片视频| 成人午夜亚洲影视在线观看| 久久久国产精品无码专区| 亚洲另类色| 亚洲永久色| 亚洲中文字幕在线观看| 污网站在线观看视频| AV片亚洲国产男人的天堂|