? ? ? ? 剛剛寫了一個(gè)demo,自定義了一個(gè)UIView,里面添加了一個(gè)UIScrollView,UIScrollView的子控件是UIButton,Button的y軸是從Scrollview的0開始的,然后我設(shè)置了Scrollview的contentSize的高度為Scrollview的高度,這樣得出的效果是支持橫向滑動(dòng),豎向靜止。但是運(yùn)行之后,得到的實(shí)際效果卻是按鈕往下移動(dòng)了64個(gè)像素,而整個(gè)Scrollview還支持豎向滑動(dòng),看到這個(gè)效果,我還以為是自己的代碼出問題了,趕緊檢查一下坐標(biāo)的設(shè)置,然而并沒有什么毛病,這就奇怪了,為什么會(huì)有這樣的情況出現(xiàn)呢?
? ? ? ? 思索了半天,不知何故,就厚著臉皮去問了下兩位污神同事,結(jié)果他們跟我說只要設(shè)置一下UIViewController的automaticallyAdjustsScrollViewInsets這個(gè)屬性為NO就可以了。當(dāng)然,我并不知道這個(gè)屬性是干什么用的,于是問了下度娘,解釋大致是:如果UIViewController里面最上邊的控件是UIScrollView或其子類View,那么它會(huì)自動(dòng)設(shè)置相應(yīng)的內(nèi)邊距,這樣就可以讓Scrollview占據(jù)整個(gè)視圖,又不會(huì)被導(dǎo)航欄遮蓋,所以按鈕才會(huì)往下偏移了64個(gè)像素。我設(shè)置完這個(gè)屬性之后,效果真的出來了,果然iOS的坑不少。
? ? ? ? 本著探索的精神,我在UIViewController的頂部分別添加了一個(gè)UIImageView和UIScrollView測試,將上述的屬性去掉,果然效果也出來了,由此可見這個(gè)屬性的使用時(shí)機(jī)就如度娘所說,當(dāng)視圖頂部只有一個(gè)控件,且控件是UIScrollView及其子類時(shí),需要將他的內(nèi)邊距屬性設(shè)置為NO,這樣就不會(huì)出現(xiàn)控件往下移動(dòng)的奇葩現(xiàn)象了。PS:剛試了一下,其他控件添加在Scrollview的底部,不設(shè)置automaticallyAdjustsScrollViewInsets為NO,Scrollview的子控件還是會(huì)往下偏移64個(gè)像素的,所以最關(guān)鍵的問題出現(xiàn)在Scrollview的位置是在哪里,若頂部無其他控件,則需要設(shè)置內(nèi)邊距屬性,否則不設(shè)置也不會(huì)有問題。