所以基本問題是,當我單擊單元格時,它應該在新視圖控制器中的單元格索引1處,但是當您有自動佈局時。 collectionview內容偏移更改消失並重置。把它關掉,工作正常。 Autolayout是以某種方式導致內容偏移重置,但我不知道爲什麼或如何解決這個問題。Autolayout和Collection View問題
代碼在這裏。
https://github.com/HaloZero/AutolayoutCollectionViewIssue
所以基本問題是,當我單擊單元格時,它應該在新視圖控制器中的單元格索引1處,但是當您有自動佈局時。 collectionview內容偏移更改消失並重置。把它關掉,工作正常。 Autolayout是以某種方式導致內容偏移重置,但我不知道爲什麼或如何解決這個問題。Autolayout和Collection View問題
代碼在這裏。
https://github.com/HaloZero/AutolayoutCollectionViewIssue
使用你的代碼爲: -
- (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];
}
工作了我的身邊。
因此,查看WillAppear不會發生在主線程或什麼? 對不起,延遲響應,我把它帶到WWDC的蘋果公司,他們提到我應該把它當作一個bug。 – HaloZero
這不是自動佈局重置內容偏移,但子視圖當您嘗試捕捉細胞沒有被定位。
使用自動佈局,子視圖稍後定位(其中viewWillAppear首先被調用)。嘗試使用viewDidLayoutSubviews,而不是你的細胞捕捉:
通知其觀點只是奠定了其子視圖的視圖控制器。
因此,在所有的約束條件都已經計算出來並且您的子視圖已經鋪好之後,您可以調用捕捉方法。
- (void)viewDidLayoutSubviews
{
[super viewWillLayoutSubviews];
[self snapToCellAtIndex:1 withAnimation:NO];
}
如果您從viewDidAppear調用snapToCellAtIndex:withAnimation:方法,而不是viewWillAppear,它將起作用。但是,在第二個單元出現之前,您確實看到了第一個單元。 – rdelmar
hello @HaloZero你在哪裏......我解決了你的問題,請在你身邊測試。 – Warewolf