一皇钞、autolayout自動(dòng)布局
1、UIScorllView約束
2松捉、ScorllView內(nèi)部添加View
3夹界、View的約束
(1)上下左右約束為0
(2)設(shè)置高度(contentsize)
(3)水平滾動(dòng)設(shè)置豎直居中,豎直滾動(dòng)設(shè)置水平居中
?二隘世、這兩天在用Swift研究一個(gè)app可柿,直接從頁(yè)面說(shuō)起,上方是一個(gè)輪播圖丙者,下方是一個(gè)collectionView复斥,很顯然,如果使用TableView后期涉及到數(shù)據(jù)傳遞的問(wèn)題就頭大了械媒,所以我最后決定用scrollView目锭,經(jīng)過(guò)垂死掙扎评汰,終于研究出了一點(diǎn)小結(jié)果,總結(jié)了一些簡(jiǎn)單的純代碼約束規(guī)則分享給大家.
里面用到的第三方約束框架是SnapKit
一痢虹、將scrollView設(shè)置為控制器的根視圖
將scrollView以子視圖的方式添加到View上被去,需要對(duì)scrollView的四個(gè)邊界進(jìn)行約束,約束到View上奖唯,一定一定要四個(gè)邊界約束
二惨缆、給scrollView添加子控件,重點(diǎn)來(lái)了臭埋。踪央。臀玄。
(1)首先我們得知道瓢阴,用代碼給scrollView添加約束時(shí),是不能設(shè)置固定contentSize(滾動(dòng)范圍)的健无,contentSize是根據(jù)子控件的大小自動(dòng)計(jì)算的荣恐;
(2)子控件必須設(shè)置大小,也就是(width累贤,height),一定要一定要寫死5隆!>矢唷E鸨弧!自動(dòng)計(jì)算contentSize渗磅,你必須要讓人家計(jì)算機(jī)知道所有子控件加在一起的width嚷硫,height.
(3)我們的需求是讓頁(yè)面上下滾動(dòng),一定要讓計(jì)算機(jī)檢測(cè)到這種結(jié)構(gòu)
?^_^ ? ? ? ? ?一定不要忘記上面正確的規(guī)則
至于一些規(guī)則始鱼,我們來(lái)看:
(1)我懂你仔掸,你在想只需約束它左右邊界就可以知道子控件的寬了,同時(shí)高也同理都約束好了医清,完美起暮,子控件大小都知道了,例如這樣:
但是你運(yùn)行出來(lái)是這個(gè)樣子负懦,看到滾動(dòng)條沒(méi),他已經(jīng)知道你子控件的加起來(lái)的長(zhǎng)度柏腻,并且計(jì)算出了contentSize纸厉,但是就是不顯示內(nèi)容
所以為了顯示內(nèi)容葫盼,你必須直接了當(dāng)?shù)募s束width残腌,height,就是這樣,盡量避免沖突的將子控件的寬和高寫死E酌ās№铩!
(2)別指望約束邊界自動(dòng)計(jì)算闺金,在這里兩邊約束是有自己的目的的.?例如:回看我們的正確版本逾滥,位于最下面的子控件的約束,(make.bottom),它存在的目的是使計(jì)算機(jī)知道這種結(jié)構(gòu)败匹,從而計(jì)算出contentSize
如果設(shè)置了固定的高就不去設(shè)置底部約束寨昙,如果這樣會(huì)顯示內(nèi)容但不會(huì)滾動(dòng)
正確版本代碼中并沒(méi)有同時(shí)設(shè)置左右邊界約束,因?yàn)槲覀儾⒉幌M?yè)面會(huì)左右滾動(dòng)掀亩,而希望頁(yè)面上下滾動(dòng)舔哪,因此,如果我們希望頁(yè)面所有方向都可以滾動(dòng)就需要毫不吝嗇的把約束全部加上并直接設(shè)置寬高,例如這種結(jié)構(gòu)