【问题标题】:UICollectionView CellForItemAtIndexPath not getting calledUICollectionView CellForItemAtIndexPath 没有被调用
【发布时间】:2014-04-02 02:57:38
【问题描述】:

我的UIViewController 中有两个UICollectionViews

假设它们是 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 时,它显示一个空的橙色屏幕。知道我的代码出了什么问题吗?

【问题讨论】:

    标签: ios uicollectionview


    【解决方案1】:

    来自this answer

    改变

      [A reloadData]/ [B reloadData] 
    

    到:

      [self.collectionView reloadItemsAtIndexPaths:[self.collectionView indexPathsForVisibleItems]];
      [self.collectionView reloadData];
    

    【讨论】:

    • 不幸的是,这对我没有帮助。我在运行时 -[UICollectionView _endItemAnimations] 中遇到断言失败。
    【解决方案2】:

    您可能丢失了数组对象中的项目数据,这些数据用于重新加载/创建集合视图单元格。仔细检查数组/数据。

    【讨论】:

      【解决方案3】:

      您的 getAData/getBData 是异步调用吗?您可能会遇到数据尚未准备好的竞争条件,因此当您调用 reloadData 时,集合视图正在创建的单元格数量为 0。这也可以解释内容大小中的小高度。

      【讨论】:

        猜你喜欢
        • 2013-01-18
        • 2014-08-17
        • 1970-01-01
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多