【Tips】UIScrollView用autolayout設置約束無法滾動?

前言

今天做項目,碰到一個需求,在一個Cell中,因為需要適配4‘,所以需要將原本的一行按鈕換成UIScrollView,可以滑動。如圖:

屏幕快照 2016-11-14 上午10.31.11.png

開始

這還不簡單,直接將原本的存放按鈕的UIView改成UIScrollView不就好咯。不一會就改好了,然后運行;發(fā)現(xiàn)還是不能動啊?。ㄒ荒樸卤疲?。
怎么辦?又仔細查看了一遍,發(fā)現(xiàn)沒有什么地方有寫錯阿。
然后Google了下,發(fā)現(xiàn)好像是autolayout這貨的問題,于是我就試著不用autolayout看看能不能滾動,直接用frame來設置位置和大小,結果果然可以滾動了!

屏幕快照 2016-11-14 上午11.01.10.png

然后

但到底是autolayout哪里出錯了,于是去查了下官方文檔,看看有沒有什么可以發(fā)現(xiàn)的。果然讓我找到了,原因如下:

The UIScrollView class scrolls its content by changing the origin of its bounds. To make this work with Auto Layout, the top, left, bottom, and right edges within a scroll view now mean the edges of its content view.

Snip20161114_1.png

如上圖所示,之前我們設置的四個約束(上下左加寬度),其實參照物不是scrollView,而應該是外面的contentSize,為什么呢?因為scrollView是會滾動的,所以如果參照的是scrollView的話,那么按鈕的位置就不是確定的了,所以參照的其實是contentSize。換句話說其實,scrollView就是根據(jù)內部按鈕的frame計算出scrollViewcontentSize。(因為autolayout本質依然是frame)。
這個時候我們再看下我們之前設置的四個約束,我們設置了上下左加寬度約束,這個時候發(fā)現(xiàn)scrollView并沒有足夠的條件去求出contentSize,因為右邊并沒有確定,所以這個時候滾動并沒有效果。這個時候我們只需要加上按鈕的右邊約束就可以有效的算出contentSize,而且可以不用去設置scrollViewcontentSize屬性了,因為已經(jīng)可以根據(jù)約束推測出來。

最后

蘋果的官方文檔是個好東西??

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,410評論 4 61
  • ScrollView 是 UIKit 中很重要的一個組件,TableView 和 UIWebView 等很多涉及到...
    WellCheng閱讀 6,467評論 5 25
  • 家鄉(xiāng)的女人 總是醒在 家的前面 家 總是醒在 黎明的前面 天還未醒 我們家的 屋頂先醒 一縷縷的炊煙 自我們家的屋...
    奚泠閱讀 1,828評論 0 0
  • 統(tǒng)一彈登錄頁面,有的是在push出來的頁面彈登錄頁面,有的是在present頁面彈登錄頁面說明 :例如:A pre...
    Minoz_min閱讀 14,594評論 4 7
  • Day27 早上懶洋洋地起來,10點了才去工作室,明天照樣不用早起真是太棒了!去羅森買了流沙包和三角形飯團當早飯,...
    小懶說Yolo閱讀 213評論 0 1

友情鏈接更多精彩內容