我有一個UICollectionViewController是導航控制器和選項卡欄控制器的一部分。在導航控制器開始時,我將Interface Builder設置爲顯示視圖底部的工具欄。對於導航控制器的第一個視圖控制器,我爲了隱藏工具欄,然後在我的UICollectionViewController使用[self.navigationController setToolbarHidden:YES animated:YES];
,我用UICollectionView框與工具欄錯誤
-(void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:NO animated:YES];
}
爲了有顯示的工具欄。這部分工作完美,我的問題來自我在UICollectionView中的UICollectionViewCell。我想這是UICollectionView的全尺寸,和我使用的自動版式,所以我使用:
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return self.collectionView.frame.size;
}
然而,第一次視圖被加載,則返回錯誤的值。第一次視圖和的CollectionView被加載,它返回的CollectionView包括工具欄,然後導致警告的高度尺寸:
項目高度必須小於該UICollectionView 的高度減去部分頂部和底部的值。
並且單元格不加載。但是,當我在警告後強制[self.collectionView reloadData];
時,正確的值將返回self.collectionView.frame.size
和單元格負載。
我真的非常沮喪,並非常感謝任何人都可以提供的幫助。
編輯: 閱讀曼迪的評論之後,我最終改變我的一些代碼:
-(void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:NO animated:YES];
[self.collectionView reloadData];
}
而且問題得到了解決。但是,現在我有一個新的但相關的問題。當我添加[self.collectionView scrollToItemAtIndexPath:selectedIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
(selectedIndexPath從第一個視圖控制器被推送)到viewWillAppear
,我得到相同的警告關於UICollectionView項目的大小。如果我有這樣的代碼:
-(void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:NO animated:YES];
[self.collectionView scrollToItemAtIndexPath:selectedIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
[self.collectionView reloadData];
}
我沒有得到大小警告,但我的CollectionView總是開始於指數0,而不是selectedIndexPath
。如果我訂購周圍改成這樣:
-(void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:NO animated:YES];
[self.collectionView reloadData];
[self.collectionView scrollToItemAtIndexPath:selectedIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
}
我得到的大小警告,細胞不加載,直到我調用調用reloadData方法。但是,它確實從正確的indexPath開始。
所以,我認爲我解釋得不好,但是你的誤解導致瞭解決方案!當我說「強制reloadData」時,我實際上是在談論調用一個執行'reloadData'的方法。然而,基於你所說的,我添加了'[self.collectionView reloadData];'到' - (void)viewWillAppear',它現在可以很好地工作。非常感謝你。 – Nick
好,我很高興。你應該點擊複選標記。 – Mundi
我會,但現在,它創建了一個不同但相關的問題(請參閱我的編輯) – Nick