亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        iOS Autolayout中的約束

        2015-04-02 23:35:30李嵐李可嘉
        科技創(chuàng)新與應(yīng)用 2015年10期
        關(guān)鍵詞:研究

        李嵐 李可嘉

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

        關(guān)鍵詞:iOS;Autolayout;研究

        1 Autolayout中約束的研究意義

        Autolayout自動(dòng)布局技術(shù)在iOS6就已經(jīng)推出了,但是因?yàn)楹芏嗳艘婚_(kāi)始不習(xí)慣使用xib編程,而是堅(jiān)持使用代碼布局控件,所以Autolayout并沒(méi)有普及的太快。但是現(xiàn)在隨著越來(lái)越多的人開(kāi)始使用xib,怎樣適配橫豎屏和不同尺寸的屏幕,成了亟待解決的問(wèn)題,好在兩年前就已經(jīng)推出并且日臻完善的xib Autolayout技術(shù)可以完美的解決。對(duì)于Autolayout而言,最為核心的基礎(chǔ)就是約束。

        2 Autolayout中約束的類型

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

        NSLayoutConstraint,開(kāi)放類。幾乎是程序員最常用的約束。它用于設(shè)置view在view tree之間的關(guān)系,自身大小等。

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

        NSAutoresizingMaskLayoutConstraint,私有類。由Autosizing mask轉(zhuǎn)換到Autolayout系統(tǒng)中的約束表達(dá)。

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

        NSIBPrototypingLayoutConstraint,私有類。如果在Storyboard中添加了一個(gè)UI控件,且沒(méi)有在Storyboard中添加任何約束,但是標(biāo)注了要使用Autolayout,那么在實(shí)際的運(yùn)行期,系統(tǒng)會(huì)默認(rèn)為它添加NSIBPrototypingLayoutConstraint約束。

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

        3 Autolayout中約束優(yōu)先級(jí)

        約束優(yōu)先級(jí)通常是形容一個(gè)約束重要性的指標(biāo),兩個(gè)約束如果共同決定一個(gè)顯示屬性的顯示,當(dāng)二者發(fā)生了抵觸的時(shí)候,優(yōu)先級(jí)表示其中一個(gè)約束,相比另外一個(gè)而言,更加重要。優(yōu)先級(jí)就是浮點(diǎn)數(shù),通常用其整數(shù)表達(dá)。

        4 ContentSize約束

        Autolayout系統(tǒng)有根據(jù)顯示內(nèi)容來(lái)自適應(yīng)尺寸的能力。這個(gè)能力是由,Intrinsic Content Size內(nèi)容大小、content hugging約束、content compression約束來(lái)共同決定。

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

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

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

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

        view1.attr1=view2.attr2*multiplier + constant

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

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

        生成方式比如:Layout Constraints的描述方式可以是原生NSLayoutConstraint來(lái)實(shí)現(xiàn),也可以是VFL,也可以是自己封裝的庫(kù)。

        5 Autolayout中約束的裝載方式

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

        6 Autolayout中約束的比較

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

        -(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中約束使用的幾個(gè)建議

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

        參考文獻(xiàn)

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

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

        猜你喜歡
        研究
        FMS與YBT相關(guān)性的實(shí)證研究
        2020年國(guó)內(nèi)翻譯研究述評(píng)
        遼代千人邑研究述論
        視錯(cuò)覺(jué)在平面設(shè)計(jì)中的應(yīng)用與研究
        科技傳播(2019年22期)2020-01-14 03:06:54
        關(guān)于遼朝“一國(guó)兩制”研究的回顧與思考
        EMA伺服控制系統(tǒng)研究
        基于聲、光、磁、觸摸多功能控制的研究
        電子制作(2018年11期)2018-08-04 03:26:04
        新版C-NCAP側(cè)面碰撞假人損傷研究
        關(guān)于反傾銷會(huì)計(jì)研究的思考
        焊接膜層脫落的攻關(guān)研究
        電子制作(2017年23期)2017-02-02 07:17:19
        国产实拍日韩精品av在线| 亚洲AV综合A∨一区二区| 精品久久久亚洲中文字幕| 一区二区在线观看日本视频| 国产av国片精品有毛| 野外性史欧美k8播放| 啊v在线视频| 国产熟女白浆精品视频二| 亚洲日韩激情无码一区| 成全视频高清免费| 黑人一区二区三区在线| 天堂蜜桃视频在线观看| 无码人妻人妻经典| 在线免费观看国产精品| 成人影院免费观看在线播放视频| 日韩三级一区二区不卡| 大肉大捧一进一出视频| 久久久久中文字幕精品无码免费 | 五十路熟女一区二区三区| 男女上床视频免费网站| 在线观看国产成人自拍视频 | 久久精品国产亚洲av麻豆瑜伽| 黄瓜视频在线观看| 色综合久久加勒比高清88| 伊人久久大香线蕉av色婷婷| 中文字幕人乱码中文字幕| 日韩a毛片免费观看| 国产精品亚洲专区无码不卡| 国产在线91精品观看| 无码国产福利av私拍| 国产极品美女高潮抽搐免费网站| 日本97色视频日本熟妇视频| 日本成本人片视频免费| 久久久久久成人毛片免费看| 国产经典免费视频在线观看| 那有一级内射黄片可以免费看| 美女把尿囗扒开让男人添| 国产精品大屁股1区二区三区| 在线高清亚洲精品二区| 成年免费a级毛片免费看| 妺妺窝人体色www在线图片|