當我們在xib或者storyboard中添加UIScrollView并像給其他控件設置約束一樣設置好約束后(例如top,leading,tralling,bottom都為0),顯示一切正常,如圖:
但是一旦當我們添加控件后就開始報錯(即便設置好約束),如圖:
此時,以前沒碰見過這種問題的同學開始懷疑人生,心理不禁問道"我明明都設置好了約束呀,這些約束設置的沒問題呀,我在其他的view上都是這樣添加約束呀,怎么會出問題呢?".
其實這也不怪第一次給UIScrollView設置約束的你,只能說UIScrollView確實跟其他UIView及其子類不同,在設置約束的時候除了常規的一些約束設置完后,還有最重要的一點要讓你的scrollView知道自己的寬和高,也就是contentSize.
大家用代碼添加scrollView的時候都知道要設置contentSize,同理在xib或者storyboard里添加scrollView時也需要設置好它的contentSize
而當我們在xib或者storyboard給scrollView添加子控件后,scrollView要根據子控件來計算它的contentSize,如果此時我們只設置了子控件的寬高和水平方向豎直方向居中(如上圖),scrollView是無法根據子控件的約束來計算出自己的contentSize的,但是我們把子控件上下左右的距離約束也添加上的話,scrollView就能夠根據子控件計算出自己contentSize了,此時約束就不會報錯了,如下圖:
知道了報錯的原因,那我們也就知道怎么去解決了,在這里我建議兩個思路:
- 思路一: 當我們添加好scrollView后,可以再添加一個clearColor的UIView,直接覆蓋在scrollView上,并設置好UIView的約束,之后再往UIView上拖子控件,而這些子控件你就可以按照常規方法來添加并設置約束了.
- 思路二: 直接在scrollView上拖子控件,但切記一定要讓scrollView能夠根據子控件的約束計算出contentSize.否則還會出現約束報錯的情況.