近日在做項目的時候,為了快捷適配屏幕采用了Storyboard,添加約束以后運行后發現一個問題(下面將以普通案例展示該問題);在4.7 甚至更大的屏幕下是沒有問題的,如下圖(4.7屏幕):
但是放到更小的3.5英寸就會出現問題,發現下面的按鈕不見了,主要原因是輸入框太多,導致更個屏幕放不下,如下圖(3.5屏幕):
想了下就決定用ScrolleView,ContentSize可以設置大一些,這樣在其他屏幕上沒有太多的影響,在3.5英寸的屏幕下也可以滑動了;但是在Storybord下添加ScrollView,添加約束的時候發現他並不會按照你猜想的去執行;經過仔細研究,大致知道了原因;這是由於scrollview本身contentSize、contentInsets等復雜的特性導致,蘋果文檔在講autolayout的時候甚至專門拿出一節講;
那么如何對scrollview進行自動布局?
解決方案:可以給ScrollView添加一個唯一的子視圖(View),大小和ScrollView一樣,然后把所有添加到ScrollView上面的控件,都添加在子視圖(View)上面;
步驟如下:
1、首先在我們的Controller自帶的View里面添加一個ScrollView,一般情況下一個View的邊距確定是通過Leading, Trailing, Top, Bottom space確定的,通常我是使用最快捷的方式:在StoryBoard中右鍵拖動出View與SuperView的線來選擇;但是如果對UIScrollView使用此方法,使其與SuperView邊緣重合,即設置邊距為0,會發現怎么也和SuperView對齊不了。
究其原因,是因為有一個默認Margin的存在,UIScrollView四周的默認Margin是16(xcode6.0);
解決方法是:不要用快捷方式,在StoryBoard的右下角,點自動布局第二個的Pin圖標,在彈出的小窗口中去掉"Constrain to margins"的勾選,然后將其上的四個邊距設置為0,如下圖所示:
2、在ScrollView上面添加一個View成為ScrollView的子視圖,點開下面設置約束的4個按鈕的第2個,設置約束距離ScrollView的距離為(0.0.0.0)如下圖所示:
3、這個時候會發現報錯了,先不用管它,咱們繼續往下走;
4、點開下面設置約束的4個按鈕的第一個,選擇 Horizontal Center in Container, 並打上對勾,(如果想要左右滑動就選擇 Vertical Center in Container,同時實現左右上下則全不選);
5、再次打開下面設置約束的4個按鈕的第2個選擇Height 設置你想要的大小(假如是700);(如果想要左右滑動就選擇 Width, 同時實現左右上下就全部設置)(這個高度是以后運行后Scroller的ContentSize);
6、設置完成之后你會發現錯誤不見了,只有一個黃色的警告,這是由於Frame沒有更新導致的,我們來更新下Frame;
7、接下來就可以在這個ScrollView的子視圖View上面來添加控件了,這里要記住設置約束的時候是相對於父試圖View的;
8、運行程序,發現在3.5英寸屏幕已經可以滑動了,,而在4.7屏幕還是和原來一樣 如下圖:
下一篇將持續更新相關知識點;
Email:dingding3w@126.com