2013-07-16 83 views
18

我有一個帶有自定義UICollectionViewLayout的UICollectionView(實際上,我正在使用this nice layout)。UICollectionView contentOffset隨自定義佈局而變化

我在viewDidLoad中設置contentOffset = CGPointZero。 viewDidLoad中以後,然而,偏移是-20,而內容被下推像這樣:


picture

(應該與線齊平)。我正在加載界面構建器中的集合視圖佈局。看來我的問題與this one非常相似,但是那裏的解決方案並不適合我。

我嘗試在我的佈局實現中修改collectionViewContentSize以確保它總是大於collectionView的大小。雖然這意味着我可以向下滾動我的內容(它比collectionView的高度更短)並隱藏額外的空間,我也可以向上滾動以查看它。

沒有什麼似乎工作!

回答

13

唯一的解決辦法我可以想出的是有勉強可接受的行爲:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if (self.collectionView.contentOffset.y < 0) { 
     self.collectionView.contentOffset = CGPointMake(self.collectionView.contentOffset.x, 0.0); 
    } 
} 

還有在collectionViewContentSize

設定內容fmax(self.collectionView.frame.size.height + 20, [self stackedSectionHeight])的高度此刪除部上方的空間標題,但它會消除頂部的「反彈」。一個相當不理想的解決方案,但相當可接受。

如果有人有,我會接受更好的答案,或者如果我找到一個我會更新此答案。

+1

我在使用水平佈局時遇到類似問題。 –

+0

在veritacal佈局內容是確定的。當更改佈局對象爲水平時,所有內容都消失 –

+0

我發現的問題和解決方案相同。我僅在iOS7 SDK上獲得此版本,並且僅在iOS7上運行。最奇怪的是,其他viewController中的另一個scrollView沒有這個問題..我打破了我的頭,但沒有找到一個理由 –

45

我找到了發生這種情況的原因。從這個問題檢查接受的答案: Status bar and navigation bar appear over my view's bounds in iOS 7

事實上,我們可以只在viewDidLoad設定的UIViewController edgesForExtendedLayoutautomaticallyAdjustsScrollViewInsets性質IB(如果你使用故事板)的,它會解決我們的問題。

只是不要忘記檢查這個屬性是可用的,因爲在iOS6的或之前會引起死機:

if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) { 
    self.automaticallyAdjustsScrollViewInsets = NO; 
} 

商祺!

+6

請注意,如果你有一個父視圖控制器中包含的集合視圖控制器,你必須設置'automaticAdjustsScrollViewInsets在* parent *控制器上。 – zoul

+0

我有一種情況,我想通過30W單元放置一個74h的collectionView,每當我從父視圖控制器移動到另一個單元時,它將被-44偏移。試圖通過嘗試很多錯誤的方式解決這個問題近兩個小時。謝謝。 – devdc

0

我開始發現這個問題出現在iOS 11上,我在滾動視圖中有一個滾動視圖。花了我近一天的時間才弄明白。

嘗試設置內容插圖調整行爲:

if #available(iOS 11.0, *) { 
    scrollView.contentInsetAdjustmentBehavior = .never 
} 

這固定我的CollectionView調整它的內容插入倒少量爲的CollectionView框架將搬過去封閉的滾動型的安全區域。

相關問題