UICollectionView 适用于 iOS8,但不适用于 iOS7

Posted

技术标签:

【中文标题】UICollectionView 适用于 iOS8,但不适用于 iOS7【英文标题】:UICollectionView working on iOS8, but not on iOS7 【发布时间】:2014-10-02 12:24:01 【问题描述】:

在为 ios7 编译时,我在 UICollectionView 上遇到了一个奇怪的错误,它在 iOS8 上运行良好。

我在 UICollectionViewCell 中有一个 UICollectionView,当我选择该 UICollectionViewCell 时,我正在增加该单元格的大小,因此其中的 UICollectionView 也应该增加其大小。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath


    if (collectionView == _collectionView)
        NSLog(@"MainCell");
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MenuCell" forIndexPath:indexPath];

        UICollectionView * categoriesCollection = (UICollectionView*)[cell viewWithTag:2];

        [categoriesCollection reloadData];
        return cell;
    else
        NSLog(@"InsideCell");
        UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CategoryCell" forIndexPath:indexPath];

        cell.backgroundColor = CUSTOMCOLOR_BLACKGROUND_CELL_CATEGORY;

        UILabel * cellLabel = (UILabel*)[cell viewWithTag:11];
        cellLabel.text = @"TEST";

        return cell;
    


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section

    if (collectionView == _collectionView)
        return 4;
    else
        return 12;
    

在 iOS8 上查看。 https://www.dropbox.com/s/49xuy3ehhneuaki/Captura%20de%20pantalla%202014-10-02%2015.46.56.png

在 iOS7 上查看。它显示了 12 行的正确空间,但只显示了 1 行。而子collectionview的高度是30,但应该是360。https://www.dropbox.com/s/oncfyc42v7zjpds/Captura%20de%20pantalla%202014-10-02%2015.49.16.png

当使用 iOS8 SDK 或 iOS7 SDK 为 iOS8 编译时,会打印 12 次“InsideCell”,但是当我使用 iOS8 SDK for iOS7 时,它只会打印 4 次“InsideCell”,并且总是第 0 行。 这是苹果的错误吗? 谢谢

【问题讨论】:

if (collectionView == _collectionView) 是什么意思? _collectionView 是您自己设置的实例变量吗?发布设置它的代码。 是的,_collectionView 是这样的 IBOutlet 属性 @property (weak, nonatomic) IBOutlet UICollectionView *collectionView; 这个类是UICollectionViewController的子类吗?如果是,您的属性声明可能与内部实现冲突。另外,您一直在比较 collectionView_collectionView 有什么特别的原因吗?您是否在使用多个集合视图? 不,这是一个普通的 UIViewController。主 _collectionView 内的 UICollectionViewCell 有另一个 UICollectionView (categoriesCollection)。我添加了 2 张比较 iOS7 和 iOS8 的图片 尝试为所有嵌套集合视图的tag 属性赋值,并测试tag 属性而不是检查与_collectionView 的相等性。 【参考方案1】:

似乎是 iOS 8.0 和 Xcode 6 的错误,所以在 Xcode 6.1 中它在 iOS7 和 iOS8 中看起来一切都很好。 谢谢苹果...

【讨论】:

以上是关于UICollectionView 适用于 iOS8,但不适用于 iOS7的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS8 中: UIPopoverController presentPopoverFromRect 不再适用于 keyWindow

等效 [UIPopoverController setContentViewController:(UIViewController *) 动画:(BOOL)];适用于 iOS8

为啥我的更新后的应用程序在仅适用于 IOS8 的启动时崩溃?

任何适用于 IOS8 beta CloudKit 的 CKDiscoverAllContactsOperation 示例代码?

[tableView setBackgroundColor:[UIColor clearColor]] 仅适用于 iOS8 的 iPad

AVPlayerViewController 适用于 iOS8 但不适用于 IOS7