2014-10-28 110 views
2

我有一個UIScrollView與幾個大UIViews(大於滾動視圖的可見區域)。我有以下行:UIScrollView滾動太多

[[self scrollView] setContentSize:CGSizeMake([self scrollView].bounds.size.width, [ListItemView instanceHeight] * MAX_NUMBER_ITEMS)]; 

ListItemView是一個自定義視圖和instanceHeight是一個靜態的高度,他們都有(即第二個參數應該是所有內容的總高度,工作正常。)。問題在於,儘管我已經將內容大小(我相信)等同於滾動視圖的實際大小,但它仍然水平滾動(在所有iPhone尺寸上模擬)。

的水平滾動條繼續出現,直到我把內容大小爲250。我發現這個通過試驗和錯誤(在251出現水平滾動條,在250事實並非如此)。爲什麼是這樣?我期望一旦contentSize小於scrollBar的實際大小(這是屏幕的寬度,320),滾動條就會消失。

+0

您是否在調用這行代碼時檢查滾動視圖的大小? – rmaddy 2014-10-28 00:56:52

+0

是的。 'NSLog(@「%f」,self.scrollView.contentSize.width); 的NSLog(@「%F」,self.scrollView.bounds.size.width);'都顯示320 – Connor 2014-10-28 03:36:23

回答

0

使用autolayout時的訣竅是你從不明確設置任何東西的大小;如果您的約束在您的視圖層次結構中始終保持一致,則所有內容都會自動調整大小(包括scrollView的內容)。如果無法預先指定視圖的大小,則應該在自定義視圖子類中重寫intrinsicContentSize並返回大小。

在你的情況,創建一個自定義視圖,其中包含所有的ListItemViews。在那個自定義類中,返回intrinsicContentSize中ListItemViews的總高度 - 你不需要在scrollView中設置內容大小。

+0

換句話說,你猜怎麼在Xcode的創造者的心目中,或者準備遭受無盡的痛苦。 – Josh 2015-05-29 14:05:09