知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
Autolayout使用詳細介紹
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):120
關(guān)于Autolayout的初步介紹
說道Autolayout,我也是在iPhone 6 And 6+ 出來之后才開端存眷的。我是一個純代碼法度榜樣者之前。
那個時刻有據(jù)說到Xib和Storyboard(如今Xib已經(jīng)應用的少了,下面直接說storyboard。其實Xib和storyboard只是父子的關(guān)系嘛),我開端在網(wǎng)上查找材料,網(wǎng)上給的解釋我總結(jié)給大年夜家如下:
1.代碼是storyboard的進級。就是說,代碼比storyboard牛逼啦。這種說法是如許來的:很多IOS開辟者,都是在Xib的引導下走向了這條不歸路的。在他們應用Xib的時刻,他們開端入行,而后,開端大年夜范圍的接觸代碼構(gòu)造UI,大年夜而逐漸成為大年夜牛了。其實我們心里肯定都有這種感到嘛,用代碼寫才是法度榜樣員嘛,在那構(gòu)圖似乎本身沒有工作一樣。
2.storyboard比代碼編寫更輕松。這是因為,很多代碼可以完成的工作,我們用storyboard真的可以很快的完成,并且storyboard的視圖構(gòu)造(等等對象)可以讓我們加倍清楚地知道我們的界面長成什么樣了。用代碼,So慢啦。然則如不雅
我是大年夜代碼到storyboard兩種方法混淆應用。就在兩個月前,我一向都沒有應用storyboard(一句呵呵,其實不是不應用,是不會!本人一向都是代碼,沒有應用過xib).后來,也就是后來,萬惡的蘋不雅,搞出來6 和 6+ 這兩個玩意,呵呵,不可了,當時認為代碼適配那是多么麻煩的工作?。ㄈ缃駜蓚€混用,發(fā)明,其實用純代碼也可以很便利的完成適配的),SO,我開端進修storyboard的應用。當然,這也是我寫這個博客的原因,因為,我進修storyboard,卻Google不到合適的文┞仿。不是英文我看不懂就是轉(zhuǎn)載轉(zhuǎn)載,看來看去照樣那幾個,實袈溱找不到本身想要的(大年夜家可以嘗嘗哦)。
故事版(storyboard)
關(guān)于故事版的應用網(wǎng)上照樣有很多材料可以找到的。這里不做具體介紹。根本介紹如下:
如不雅您對IOS開辟代碼熟悉卻對storyboard不熟悉,那就是說你和別人走的不一樣的路。IOS開辟入門的規(guī)律來說,你一開端是進修xib的UI構(gòu)造,然后你才開端應用UIView,UIViewController如許的代碼構(gòu)造。
[img]http://img.blog.csdn.net/20150105142203025?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/1.png在storyboard中,你可以拖拽UIImage,UIButton,UIView等等,用segue你就可以進行界面的跳轉(zhuǎn)等。就是說,除了復雜的操作我們須要代碼(如復雜動畫等),其他的,我們大年夜都是可以用視圖進行拖拽來完成的。具體應用故事版欲望大年夜家可以Google。這里不再介紹。
Autolayout介紹
這是我們的進修重點(IOS8有兩個兩點,一個是主動構(gòu)造,一個是SizeClass,SizeClass此文末尾會有簡單介紹,具體介紹見今后博客)。是的,在6 和 6+出來后,我們須要主動構(gòu)造,當然,我們可以應用代碼進行設(shè)備斷定或者frame.size.width等方法進行構(gòu)造,下面會說到。在ios6蘋不雅團隊就已經(jīng)放出了autolayout的應用版本,如今應用它,已經(jīng)比較成熟了的技巧。
在故事版中,我們可以應用Autolayout,也可以不實用AutoLayout.不應用的時刻,我們就是在“絕對構(gòu)造”,應用的時刻,我們就是在“主動構(gòu)造”。下面和大年夜家介紹這兩個名稱。 如不雅大年夜家對html比較熟悉的話,那么可能會應用到css中對div進行構(gòu)造的辦法。那邊應用的很多也就是主動構(gòu)造。我們可以如許想想,全世界有各種各樣的瀏覽器,而網(wǎng)頁的代碼弗成能對不合尺寸的瀏覽器都要做一個適配對紕謬。所以呢,html中就應用css的相對距朗攀來計算響應div的距離或者寬度。下圖是div中表里間距:
[img]http://img.blog.csdn.net/20150105142207968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/2.png
而主動構(gòu)造中,我們應用的不再是如下的代碼:
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)]; view.backgroundColor = [UIColor clearColor]; [self.view addSubview:view];
[img]http://img.blog.csdn.net/20150105142254068?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
相干故事版中的實現(xiàn)如圖: [img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/3.png我們應用絕對定位了這個紅色view的地位和大年夜小為(10,100,100,100) 膳綾擎的代碼和故事版中,我們把一個試圖精確的定位在了一個地位。這種方法叫做“絕對構(gòu)造”。autolayout中我們應用的“相對構(gòu)造”,即相對某一個view的間距是若干。如下圖:
[img]http://img.blog.csdn.net/20150105142256625?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/4.png這里我們可以看圖片右邊都黑色View的英文描述,Leading Space :125就是父View左邊距125px。Top Space 49就是紅色view上邊距49px。Equal Height 15px就是說黑色view與紅色view等高差了15px,還有一個就是肯定本身的高度為82px,我們經(jīng)由過程4個相對距離切實其實定了黑色view的地位。大年夜家可以看到,這瑯綾腔有應用到代碼,我們肯定了一個view的地位。應用的就是相對構(gòu)造。在故事版的autolayout中,任何一個視圖,都有很多的相對構(gòu)造的對像,如我們可以已父view為對像進行構(gòu)造,也可以依一個按鈕UIButton等等,只如果view,都可以作為你應用相對構(gòu)造的對像。一般來說,我們肯定一個view的地位應用相對構(gòu)造,我們須要肯定的就是寬度,高度,x距離,y舅鏊歿四個參數(shù),而我們下面的進修甚至今后的應用,大年夜部分都是環(huán)繞這四個參數(shù)進行下去的。
Autolayout的初步應用
應用Autolayout,我們起首來熟悉一下故事版中對autolayout支撐的界面按鈕。
起首回到項目標開端,我們須要打開項目標autolayout支撐。
[img]http://img.blog.csdn.net/20150105142354830?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/5.png
如圖,“Use Auto Layout”的溝溝我們選上。下面的“Use Size Classes”就是ios8瑯綾擎的另一個神器,末尾會有剪短介紹。
我們右鍵將一個view拉到另一個view膳綾擎,就可以看到如下的視圖:
[img]http://img.blog.csdn.net/20150105142339937?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/6.png
上圖中,我們右鍵黑色view不放,拉到紅色view膳綾擎,就出現(xiàn)了膳綾擎的選擇框。
這里是一個重點,我和大年夜家具體的解釋每個選項的意思:
1.Horizontal Spacing:閣下距離,就是本view和紅色view的閣下程度距離
2.Vertical Spacing:高低距離,就是本view和紅色view的高低垂直距離
3.Top:上邊距,就是兩個view的上邊距的距離差
4.Center Y:垂直中點:就是和紅色view的Y軸偏向的中點
5.Bottom:下邊距,就是兩個view的下邊距的距離差
6.Left:左邊距,就是兩個view的左邊距的距離差
7.Center X:程度中點:就是和紅色view的X軸偏向的中點
8. Right:又邊距,就是兩個view的又邊距的距離差
9.Equal Widths:表示兩個view等寬
10.Equal Heights:表示兩個view等高
這個就是主動構(gòu)造的初始介紹!是不是感到很沖動,相對距離本就是依附如許的左邊距,右邊距的差值決定的。我們管這個器械叫做“束縛”。是的,每個束縛就是一個對view地位切實其實定。我們應用定義多個束縛,就可以肯定一個view的具體高度、寬度、左邊距、右邊距等。(束縛弗成以少,少了view地位不肯定,束縛也弗成以多,多了會報錯,因為地位混亂了嘛)
束縛
當我們應用束縛的時刻,是不克不及夠多也不克不及夠少的。多了就地位混亂了,少了又不克不及肯定view的地位。如下圖:
[img]http://img.blog.csdn.net/20150105142405890?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/7.png
當我們的束縛過少的時刻,會出現(xiàn)膳綾擎的右上方的紅色警告。我們點擊進去可以看到具體解釋:
[img]http://img.blog.csdn.net/20150105142448245?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/8.png
這里就具體說了出現(xiàn)警告的原因。因為束縛太少或者束縛太多,都邑出現(xiàn)膳綾擎的警告。所以這個時刻,就要查看本身的束縛是不是有問題拉(一開端會發(fā)明找到響應的束縛須要時光,比較闇練應用過后,會發(fā)明,根本膳綾腔有太大年夜的問題在添加束縛的時刻)
如不雅我們的束縛添加正常的話,我們的view看起來會是如許:
[img]http://img.blog.csdn.net/20150105142513189?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/9.png
你會看到綠色。是的,如不雅束縛添加正常的話,那么會正??吹骄G色的。 如不雅束縛已經(jīng)添加好,那么我們的view就已經(jīng)有一個地位在故事版中了,閉上膳綾擎的圖,紅色和黑色已經(jīng)在一個地位膳綾擎了。如不雅這個時刻我們移動了view,如下圖:
[img]http://img.blog.csdn.net/20150105142527557?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/10.png
我們就會看到,有黃色的線條,這個就是故事版給我們的提示,說view的如今地位和預期地位有了更改,還會把更改的數(shù)值給我們。
[img]http://img.blog.csdn.net/20150105142817160?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
這個時刻我們就可以如許的操作來清除黃色: [img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/11.png 我們可以在試圖區(qū)域的右下角看到四個按鈕,個中第三個打開就是膳綾擎的效不雅。我們可以點擊第一個
Update Frames
,這個時刻我們的view就會按照已經(jīng)寫好的束縛進行從新排版。當然如不雅我們發(fā)明地位更悛改后的界面效不雅更好,那么我們就可以點擊第二個選項Update
Constraints
。我們在字面意思就可以看到,就是刷新“束縛”,如許就可以讓束縛根據(jù)當前的UI構(gòu)造進行響應的數(shù)值更改了。常用的按鈕
我們可以經(jīng)由過程鼠標右鍵對view進行束縛的添加,也可以在這里添加束縛:
[img]http://img.blog.csdn.net/20150105142850872?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/12.png
我們點擊下面四個按鈕中的第一個就可以了。這里我們留意一,須要選擇至少兩個view哦,不然相對對象找哪個??!點擊下面的
Add X Constraints
就可以添加上束縛了。當然,我們也可以只選擇一個view,就可以添加束縛,個中另一個相對對象是xcode本身斷定的,就是在膳綾擎的四個按鈕中的第二個。這個不常應用,就不介紹了。比較切實其實不消嘛。我添加束縛就是用鼠標右鍵拉動的,很快,其他的都不須要的。
束縛級別
這個有一個須要提一下,可能大年夜家在應用Autolayout的時刻不會碰到,然則萬一碰到了呢?就是束縛其實也是有級其余。如許說,如不雅你是C,A讓你做這件事,B讓你做那件事,你該若何是好?這就和束縛一個,如不雅有兩個不合的對象卻功能雷同的束縛加載在一個view膳綾擎,這個view該若何顯示呢?其實一般來嗣魅如許就已經(jīng)報錯了,報錯就是如許的操作是缺點的嘛。然則有一些特別的情況,我就碰到過(具體大年夜家可能會碰到,這里就不說了),是必須加兩個也有可能更多的雷同功能的束縛,這個時刻如不雅束縛有一個優(yōu)先級,那么編譯器不就知道該加載哪個束縛了嘛!我們看這里:
[img]http://img.blog.csdn.net/20150105142920496?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2ZhbmFjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://blog.csdn.net/yangfanacc/article/details/42422357/file:/Users/appying/Desktop/%E6%95%85%E4%BA%8B%E7%89%88%E4%BD%BF%E7%94%A8/13.png 我們點一一個添加了束縛的view,然后在右側(cè)可以點擊
Edit
按鈕看到膳綾擎的畫面。大年夜家留意到Priority
這個參數(shù)哦,這個就是優(yōu)先級。默認都是1000.如不雅你那邊相對寬度并且,有不合的束縛,可以改變┞封個值,用800,900,1000如許的不合優(yōu)先級來表示。(開端不懂Autolayout,為了本身想要的實現(xiàn),最后發(fā)清楚明了這個功能。如今可以不消這個優(yōu)先級的,下面會說到代碼:)
)初步總結(jié)
經(jīng)由過程膳綾擎的初步介紹和解釋,大年夜家可能已經(jīng)懂得到了What is AutoLayout。是的, 在AutoLayout中,沒有了我們之前說的Frame的概念,相反,帶來的是相對地位。本身的高度可以經(jīng)由過程相對地位來肯定,也可以經(jīng)由過程指定一個特定的值來肯定。并且,我們的相對地位可所以屏幕膳綾擎的任何元素,如高低閣下屏幕邊距及高低中心線或閣下中心線等,也可所以我們自定義的一個view。這個view有了本身的地位之后,也可以當做其他view的供給相對地位的對像。
膳綾擎只是初步的應用。具體的應用也比較多,這里不寫了,不然不知道要寫若干呢。不過這里不寫不代表你就不會應用了。其實你只要簡單的操作一個紅色藍色綠色的view,然后變更不合的地位多操作幾回,你就發(fā)明,已經(jīng)對Autolayout有了很大年夜的應用了。這里在說一個,你在這個過程中會發(fā)明Autolayout的不足,就是不足夠表達你或者你那殘暴的設(shè)計師所設(shè)計出來的頁面效不雅。這個時刻,就打開辟頁回頭持續(xù)看下面的文┞仿的了......
深處
我們都知道,在計算機的世界里,我們操作的都是01010101...外表也就是我們寫的代碼。那么我們剛才應用的Autolayout是不是就只是界面拖動元素那么簡單呢?肯定不是的。 Autolayout后面也是代碼。如不雅大年夜家應用過Git等代碼治理對象,會發(fā)明多人合作Autolayout會掉足。git可是代碼治理對象,怎么會對Autolayout產(chǎn)生掉足的提示呢?因為Autolayout也是代碼,他的后臺實現(xiàn)也是代碼。
這個時刻,我知道了一個VFL的說話。就是很揪心的說話,就喝下面如許:
NSDictionary *metrics = @{@"first":@(first), @"second":@(second), @"third":@(third), @"forth":@(forth)};
NSString *vfl = @"|-0-[_labRiqi(first)]-1-[_labPingjun(second)]-1-[_labCankao(third)]-1-[_labResult]-0-|";
NSString *vfl2 = @"V:|-0-[_labRiqi(_labPingjun,_labCankao,_labResult)]-0-|";
[_cellView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl options:0 metrics:metrics views:dict1]];
[_cellView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl2 options:0 metrics:metrics views:dict1]];
vfl說話就和膳綾擎的┞封樣,半逝世不活的。應用VFL和界面膳綾擎添加束縛是一樣的效不雅,就是復雜有一些,大年夜家可以谷歌。然則我用了良久,原因很簡單的了,如不雅應用Autolayout那么的構(gòu)造,完成不了設(shè)計師大年夜神設(shè)計的界面??墒俏矣窒胗茫艺J為不消構(gòu)造僅僅應用相對地位是網(wǎng)頁端的專利,沒有想到手機端Native app也可以應用到。所以我用的就是膳綾擎的VFL說話的代碼進行相對構(gòu)造。
當然了,大年夜家對于膳綾擎的VFL說話,到GOOGLE膳綾擎查看一下就行了。因為我有更好的器械送給你們,不要在用這看到就認為是外星人般的VFL了。
額外解釋一下:本來想重點解釋這個的,然則因為大年夜家可能今后都不消VFL了,就剪短的說一下了。我們在故事版瑯綾擎放置的view等,用Autolayout添加束縛和用代碼添加束縛是不克不及夠共存的。就是說,如不雅已經(jīng)在故事版中添加束縛,那么就不要想著經(jīng)由過程
IBOutlet
后在經(jīng)由過程代碼修改束縛的了。我試過,花了很長時光,沒有成功。我不知道是不是可以走得通,然則我沒有走通,網(wǎng)上也是在找不到相干的材料。Masonry神器的到來
這里寫的文字起碼。Masonry是一個Github膳綾擎托管的項目。這里紕謬Masonry進話舊紹(我們已經(jīng)習慣了代碼而不是故事版的UI,這個類庫可以幫我們應用少量代碼完成束縛的添加),如不雅今后心境好會在今后的博客瑯綾擎進行解釋。大年夜家快去Github膳綾擎查看吧...
此文后面會根據(jù)不合情況有更新。如不雅轉(zhuǎn)載,請加上泉源鏈接哦:),不克不及因為幾處沒有的更新而誤害了他人啊......
本文用的markdown語法。真欲望CSDN可以支撐Markdown,如今的編輯框太丑了,一點也不好用。這些年沒有變更,真不知道什么竽暌孤氣保持到如今!
相關(guān)案例查看更多
相關(guān)閱讀
- 網(wǎng)站開發(fā)
- 商標注冊
- 貴州小程序開發(fā)
- 汽車報廢拆解管理系統(tǒng)
- 模版消息
- 網(wǎng)站制作哪家好
- 網(wǎng)站制作
- 小程序被騙
- 小程序定制
- 買小程序被騙
- 保山小程序開發(fā)
- 小程序退款
- 云南網(wǎng)絡(luò)營銷顧問
- 云南小程序被騙蔣軍
- 網(wǎng)站建設(shè)特性
- 網(wǎng)站建設(shè)高手
- 網(wǎng)站建設(shè)首選
- 微信小程序
- 百度排名
- 網(wǎng)站收錄
- 網(wǎng)站建設(shè)專家
- typescript
- 昆明軟件公司
- 網(wǎng)站建設(shè)公司地址
- 云南網(wǎng)站建設(shè)電話
- 云南省建設(shè)廳網(wǎng)站官網(wǎng)
- 云南衛(wèi)視小程序
- 小程序
- 跳轉(zhuǎn)小程序
- 重慶網(wǎng)站建設(shè)公司