首先,我們新建一個項目演示一下在Storyboard/xib中利用自動布局給UIScrollView子控件添加約束會出現(xiàn)的問題:
1.我們往Main.storyboard中拖入一個UIScrollView,并給其設(shè)置一個藍色背景方便我們調(diào)試,然后設(shè)置水平垂直方向居中,寬高各為200的約束:
2.運行程序效果如下:
3.接下來我們給這個UIScrollView添加一個UITextField子控件并設(shè)置其約束:上部間距50,左邊間距20,寬度100,高度30:
一般給控件設(shè)置以上四個約束即可,但是這里我們發(fā)現(xiàn)界面報錯:
其實,這是由于UIScrollView的特殊性造成的,雖然這樣也可以運行程序,但是一般不推薦這樣做,如果UIScrollView中存在很多子控件可能會造成很多未知錯誤.
那么怎么解決這個問題呢?
首先,我們需要添加一個UIView類型的控件成為UIScrollView的唯一子控件,并設(shè)置其上下左右間距都為0,這時候我們發(fā)現(xiàn)設(shè)置完四個約束后仍然會報錯,這里我們就來解釋一下UIScrollView的特殊性:其實UIScrollView要想實現(xiàn)滾動,必須設(shè)置其滾動區(qū)域contentSize,而這里UIScrollView的滾動區(qū)域是由其子控件的內(nèi)容決定的,所以這里我們先添加一個UIView成為UIScrollView的唯一子控件,并設(shè)置其上下左右約束均為0,然后設(shè)置UIView的寬度為300(這個高度就是UIScrollView的內(nèi)容寬度: contentSize.weight),在設(shè)置垂直居中,然后運行程序就會看到UIScrollView可以左右滾動了.
同理,如果要想上下滾動就將UIView的高度約束設(shè)置成300(這個高度就是UIScrollView的內(nèi)容高度: contentSize.height),水平居中就可以了.
如果要想上下左右都可以滾動,那么就將寬高約束都設(shè)置為300.不用設(shè)置水平和垂直居中.
4.接下來所有的控件都添加到UIView中即可利用自動布局來設(shè)置約束.