我的UICollectionViews
中有两个UIViewController
。
假设它们是A和B,A和B位于nib文件中UIViewcontroller中的相同位置,它们具有完全相同的大小。
现在我设置
A.delegate = self;
A.dataSource = self;
B.delegate = self;
B.dataSource = self;
[A registerNib:nib forCellWithReuseIdentifier:CELL_A];
[B registerNib:nib forCellWithReuseIdentifier:CELL_B];
ViewDidLoad
中的
然后在CellForItemAtIndexPath
,
我使用switch语句来显示不同的单元格。
然后我使用段控件来控制在我选择的段上显示正确的UICollectionViewcontroller
。
在段控制值中更改了代码。我用:
- (IBAction)sectionSelected:(id)sender {
if (choosing A) {
B.hidden = YES;
A.hidden = NO;
A.backgroundColor = [UIColor blackColor];
[self getAData];
[A reloadData];
}
else if (choosing B) {
A.hidden = YES;
B.hidden = NO;
B.backgroundColor = [UIColor orangeColor];
[self getBData];
[B reloadData];
}
}
当我将默认选定的段设置为A时, A正确显示。但是当我切换到B时,我可以看到B是加载但是数据没有加载到B所以除了橙色背景之外我什么都看不见。我把NSLog放在CellForItemAtIndexPath
中,发现reloadData
之后没有调用该方法。
以下是A.collectionViewLayout.collectionViewContentSize;
和B.collectionViewLayout.collectionViewContentSize;
content size of B = 768.000000, 24.000000
content size of A = 768.000000, 880.000000
当我将默认选定的段设置为B时,B正确显示。我切换回A,也正确显示。然而,当我再次切换回B时,它显示一个空的橙色屏幕。知道我的代码出了什么问题吗?
答案 0 :(得分:2)
更改
[A reloadData]/ [B reloadData]
为:
[self.collectionView reloadItemsAtIndexPaths:[self.collectionView indexPathsForVisibleItems]];
[self.collectionView reloadData];
答案 1 :(得分:1)
可能您丢失了数组对象中的项目数据,用于重新加载/创建集合视图单元格。仔细检查数组/数据。
答案 2 :(得分:0)
你的getAData / getBData是异步调用吗?您可能遇到数据尚未就绪的竞争条件,因此当您调用reloadData时,集合视图正在创建的单元格数量为0.这也可以解释内容大小中的小高度。