1. 程式人生 > >iOS開發之xib或storyboard上給UIScrollView新增子控制元件約束報錯的問題

iOS開發之xib或storyboard上給UIScrollView新增子控制元件約束報錯的問題

當我們在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了,此時約束就不會報錯了,如下圖:

知道了報錯的原因,那我們也就知道怎麼去解決了,在這裡我建議兩個思路:

  1. 思路一: 當我們新增好scrollView後,可以再新增一個clearColor的UIView,直接覆蓋在scrollView上,並設定好UIView的約束,之後再往UIView上拖子控制元件,而這些子控制元件你就可以按照常規方法來新增並設定約束了.
  2. 思路二: 直接在scrollView上拖子控制元件,但切記一定要讓scrollView能夠根據子控制元件的約束計算出contentSize.否則還會出現約束報錯的情況.