2013-06-05 65 views
1

所以基本問題是,當我單擊單元格時,它應該在新視圖控制器中的單元格索引1處,但是當您有自動佈局時。 collectionview內容偏移更改消失並重置。把它關掉,工作正常。 Autolayout是以某種方式導致內容偏移重置,但我不知道爲什麼或如何解決這個問題。Autolayout和Collection View問題

代碼在這裏。

https://github.com/HaloZero/AutolayoutCollectionViewIssue

+0

如果您從viewDidAppear調用snapToCellAtIndex:withAnimation:方法,而不是viewWillAppear,它將起作用。但是,在第二個單元出現之前,您確實看到了第一個單元。 – rdelmar

+0

hello @HaloZero你在哪裏......我解決了你的問題,請在你身邊測試。 – Warewolf

回答

1

使用你的代碼爲: -

- (void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self performSelectorOnMainThread:@selector(doyouwork) withObject:nil waitUntilDone:NO]; 
} 

-(void)doyouwork 
{ 
    [self snapToCellAtIndex:1 withAnimation:NO]; 
} 

- (void) snapToCellAtIndex:(NSInteger)index withAnimation:(BOOL) animated 
{ 
    NSIndexPath *path = [NSIndexPath indexPathForRow:index inSection:0]; 
    [self.collectionView scrollToItemAtIndexPath:path atScrollPosition:UICollectionViewScrollPositionLeft animated:animated]; 
} 

工作了我的身邊。

+0

因此,查看WillAppear不會發生在主線程或什麼? 對不起,延遲響應,我把它帶到WWDC的蘋果公司,他們提到我應該把它當作一個bug。 – HaloZero

0

這不是自動佈局重置內容偏移,但子視圖當您嘗試捕捉細胞沒有被定位。

使用自動佈局,子視圖稍後定位(其中viewWillAppear首先被調用)。嘗試使用viewDidLayoutSubviews,而不是你的細胞捕捉:

從文檔viewDidLayoutSubviews

通知其觀點只是奠定了其子視圖的視圖控制器。

因此,在所有的約束條件都已經計算出來並且您的子視圖已經鋪好之後,您可以調用捕捉方法。

- (void)viewDidLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 
    [self snapToCellAtIndex:1 withAnimation:NO]; 
}