一伏恐、前引
? ? ? ?在我們開發(fā)的過程中咙咽,經(jīng)常要用到詳情頁(yè)。詳情內(nèi)容過多媒峡,或者是因?yàn)槠聊贿m配的緣故(在7p 上的固定頁(yè)面展示在phone5 phone5s 上)瘟栖,會(huì)導(dǎo)致頁(yè)面顯示不全,就使得我們需要合理的定制一個(gè) scrollview 去展示谅阿。
? ? ? 縱觀現(xiàn)在市場(chǎng)上的 xib 定制 scrollview 上的解答內(nèi)容半哟,能用的很少酬滤。而且對(duì)于剛?cè)腴T的新手來說很難理解。在此 我總結(jié)一番寓涨,希望能給大家?guī)韼椭?/p>
二盯串、詳解
? ? ?綜合來說xib 拖 scrollview 的難點(diǎn)在于——scrollview 上添加子控件。再側(cè)重點(diǎn)說的話 戒良,就是scrollView 上的 contentSize 的設(shè)置体捏,我總結(jié)的原則主要有兩點(diǎn):
? ? ?1、確定 scrollview 的視圖顯示范圍
在這里我們要確定 scrollview 在父視圖中的顯示范圍糯崎,為了能對(duì)比顯示几缭,我沒有讓其占據(jù)全屏顯示。這個(gè)步驟沃呢,并沒有什么難點(diǎn)年栓,刷新布局后展示效果如下
2、添加子視圖樟插,并確定子視圖的大小韵洋,以及到 scrollview 的四邊距(為什么是四邊距?)
? 這個(gè)是我們添加子視圖的關(guān)鍵黄锤,設(shè)置子視圖的大小搪缨,主要也是為了最后我們的 contentSize 服務(wù)的。我們平常設(shè)置一個(gè)視圖的約束鸵熟,設(shè)置寬高就以及左邊距 上邊距就可以確定一個(gè)視圖的位置副编,編譯器就不會(huì)報(bào)錯(cuò)
這是我們正常視圖中添加子視圖,需要做出的約束條件流强。但是我們按照這個(gè)方法在 scrollview 中設(shè)置會(huì)怎么樣呢 痹届?
這個(gè)方法在設(shè)置 scrollview 中就報(bào)錯(cuò)
原因說我們沒有足夠的約束來判斷 scrollview 的 contentSize,這是問題的關(guān)鍵,假如我們按照現(xiàn)在約束條件來計(jì)算 contenSize 的橫向大小 我們可以用 左邊距+子視圖寬度?打月,可這樣的話队腐,你沒有設(shè)置這個(gè)視圖右邊的范圍,也就是無(wú)法計(jì)算出視圖的總?cè)菁{范圍奏篙。所以我們不能再按正常視圖的設(shè)置約束的方法去設(shè)置 scollView柴淘。因?yàn)槲覀僺collview 有一個(gè)特殊的因素 contentSize,正確的設(shè)置方法如下
四邊距的設(shè)置是為了配合子視圖的大小 來確定 scrollview 的 contenSize秘通。 編譯器會(huì)根據(jù)
(1)scrollview 的約束 設(shè)置scrollview視圖的位置大小?
?(2)會(huì)根據(jù)子視圖的四邊距为严,來確定子視圖在 scrcollview 的位置
(3)會(huì)根據(jù)四邊距 和子視圖大小 來確定 contentSize。
這樣你的編譯就不會(huì)出現(xiàn)問題肺稀。
三第股、總結(jié)
? ? ? ? 仔細(xì)理解,就會(huì)發(fā)現(xiàn)我們?cè)O(shè)置 scrollview 還是非常簡(jiǎn)單的话原,我們除了常規(guī)的設(shè)置約束的同時(shí)夕吻,再計(jì)算一下當(dāng)前的約束能否確定當(dāng)前 scrollview 的 contentSize诲锹,能否 唯一確定當(dāng)前 scrollview的內(nèi)容顯示范圍(和在父視圖的展示范圍不一樣),如果可以 梭冠,那么你的設(shè)置就沒有問題辕狰。
? ? ?希望我的總結(jié)能幫到大家,也希望有發(fā)現(xiàn)錯(cuò)誤的同行控漠,及時(shí)指出問題蔓倍,大家互相交流,互相切磋盐捷。