UIScrollView的坑--UINavigationController Push後位置變化

今天在使用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,發現位置是咱們想要的了.其中原理暫不清楚..

猜想多是由於...若是你知道其中的緣由,可在此留言...感激涕零

這裏將測試的工程放在此,若是有須要能夠去下載.

百度網盤:http://pan.baidu.com/s/1mgNu7XI

相關文章
相關標籤/搜索