2016-03-01 26 views
0

我用UIScrollView創建了一個視圖。當我嘗試向下滾動時,它在不同設備上的工作方式不同。我發現這是因爲設備的屏幕尺寸不同。我正在使用scrollView.contentSize = CGSizeMake(325, scrollView.frame.height)來設置滾動視圖高度。當在不同的設備上快速運行時,UIScrollView不會滾動或部分滾動

我碰到這個來的時候,我試圖找到我的問題

CGRect contentRect = CGRectZero; 
for (UIView *view in self.scrollView.subviews) { 
    contentRect = CGRectUnion(contentRect, view.frame); 
} 
self.scrollView.contentSize = contentRect.size 

的解決方案,但因爲我的滾動型由許多子視圖,標籤和不同尺寸不同的按鈕,這並不爲我工作位置。我完成了故事板上所有scrollview的設計,並沒有使用自動佈局。

我需要得到滾動視圖相對於它正在運行的設備的確切高度。有沒有什麼簡單易行的方法來實現這一點?如果沒有,我想知道我需要做些什麼才能達到理想的高度。提前致謝!

回答

0

我認爲你會將scrollview的contentSize與其框架/邊界混淆。 scrollview的框架應該與您正在運行的設備屏幕的邊界相匹配。 contentSize應該是「虛擬畫布」大小,即「許多子視圖,標籤和不同大小的按鈕以及不同位置的大小」。這應該永遠不會改變,因爲您希望scrollview能夠滾動顯示所有它,無論設備的實際大小是什麼。我會使用autolayout將scrollview的邊緣擴展到它的超級視圖的邊緣。您將不得不在代碼中明確設置contentSize,但不幸的是,在故事板編輯器中沒有辦法做到這一點。

+0

我在故事板中安排了子視圖,按鈕和標籤。我正在代碼中完成其餘部分。如您所說,滾動視圖與設備的界限相匹配。你說contentSize不應該改變,但contentSize在不同的設備中不會保持不變。每次在新設備上構建代碼時,我都必須更改代碼中的contentSize,否則它不會以所需的方式滾動。 – ebby94

+0

我很困惑。如果您在故事板中安排控件,那麼您應該知道基於此的contentSize。如果您根據框架的大小在代碼中移動它們,那麼在完成佈局後,您應該能夠計算出contentSize。該代碼片段應該能夠在所有子視圖都處於滾動視圖後運行。它是什麼回來,你認爲它應該返回什麼? – jsd

+0

故事板上的滾動視圖的寬度和高度分別爲325和800。如果我將內容大小設置爲該值,則在iPhone 4上構建它時會正確滾動,而在iPhone 6和6 plus之類的屏幕尺寸較大的設備上運行時,它將無法正常工作。我還檢查了scrollView.frame.height在不同設備上返回不同的值。它在iPhone 4s上返回了712,並在iPhone 6s Plus上返回了968。 – ebby94