今天在使用UIScrollView的時候遇到了一個問題,記錄一下.若是這個記錄有幸被您搜索到,或許對您有些幫助.測試
今天有這樣一個需求:spa
在一個由導航條控制的頁面中.須要顯示一些信息,目前已經有10多行,怕之後可能會增長,因此這裏考慮使用滾動視圖.get
因爲使用的是storyboard,因此就直接拖拽了一個UIScrollView到控制器的視圖中,設置frame爲0,64,320,504io
而後開始往UIScrollView上拖拽控件...原理
完成後一運行,發現UIScrollView中的控件位置都不對,感受總體向下移動了64的位置,恰好是導航條和狀態欄的高度...百度
左弄右弄一番後,仍是老樣子...搜索
因而到羣裏問了下大嬸們.獲得的答案是:下載
通常不用拖控件,通常都是手寫代碼,動態加上去的...程序
將UIScrollView的位置設置爲0,0,由於Push進來的時候會將視圖向下壓一個導航條的高度...方法
因而一番設置後,上面的位置能夠了,可是下面滾動的又不協調了:因爲UIScrollView的Y值是0,是從屏幕的頂端開始往下滾動....
結果仍是有問題...因而專門寫了下面例子代碼
例子很簡單.一個 UINavigationController導航,root下有2行,對應2個頁面.
2個頁面一樣的放了
一個UIScrollView frame爲0,64,320,504
一個lable 位置爲0,0,
可是在push後顯示的位置有變化:第一個頁面中的lable被下移了...
問題:
因爲在頁面1和頁面2中UIScrollView都是直接在控制器視圖的下面,即控制器視圖下的第一個元素就是UIScrollView.
這樣nav就會將此視圖向下壓一個導航條(有沒有加狀態欄的高度我沒有驗證)的高度.因此lable的位置發生了變化...
解決方法:
如頁面2中,隨意將一些空間拖拽至控制器視圖下,使UIScrollView不是控制器視圖的第一個元素便可.
運行程序,進入頁面2,發現位置是咱們想要的了.其中原理暫不清楚..
猜想多是由於...若是你知道其中的緣由,可在此留言...感激涕零
這裏將測試的工程放在此,若是有須要能夠去下載.