将布局更改为自定义类后,UicollectionViewCell 未显示

Posted

技术标签:

【中文标题】将布局更改为自定义类后,UicollectionViewCell 未显示【英文标题】:UicollectionViewCell not showing up after changing the Layout to custom class 【发布时间】:2015-03-09 06:49:04 【问题描述】:

我将RFQuiltLayout 用于我的uicollectionview

我的故事板包含Uiview + collectionview。 collectionview 是 IBOutleted 到我的 UiView 类,在我的故事板中,我正在为我的 collectionview 使用自定义布局,如下所示:

我正在从appdelegate 类加载我的collectionview 数据,所以在第一次运行时,它会为numberOfItemsInSection 返回0,在从服务器获取数据后,它将加载我的collectionview。

现在的问题是,如果我将布局更改为流程序可以正常工作,但如果我使用 RFQuiltLayout 之类的自定义类,则不会显示任何单元格,

numberOfItemsInSection 返回我的实际值,但 cellForItemAtIndexPath 没有被调用。

ViewDidLoad中的代码:

   self.CV.delegate = self;
    self.CV.dataSource = self;
    [self.CV registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"MyCell"];

    RFQuiltLayout* layout = (id)[self.CV collectionViewLayout];
    layout.direction = UICollectionViewScrollDirectionVertical;
    layout.blockPixels = CGSizeMake(75,75);

我也在viewDidAppear中打电话给reloaddata

appdelegate:

   ParseOperation *weakParser = parser;
    parser.completionBlock = ^(void) 
        if (weakParser.appRecordList) 
            dispatch_async(dispatch_get_main_queue(), ^

           MyCollectionViewController *rootViewControllers = (MyCollectionViewController*)[(UINavigationController*)self.window.rootViewController topViewController];
                rootViewControllers.entries = weakParser.appRecordList;
               [rootViewControllers.CV.collectionViewLayout invalidateLayout]; 
               [rootViewControllers.CV reloadData];
            );
        

一件事是,如果我在我的委托中使用此代码,uicollection 会显示,但没有任何自定义布局和滚动功能:

            [rootViewControllers.CV reloadData];
            NSMutableArray *indexPaths = [[NSMutableArray alloc] init];
            NSIndexPath *indexPath;
            for (int i = 0; i < [weakParser.appRecordList count]; i++) 
                indexPath = [NSIndexPath indexPathForItem:i inSection:0];
                [indexPaths addObject:indexPath];
            

            [rootViewControllers.CV reloadItemsAtIndexPaths:indexPaths];

RFQuiltLayout 里面的方法被调用,但是里面的布局方法

uiview 像这些“blockSizeForItemAtIndexPath”和

blockSizeForItemAtIndexPath”没有被调用。

【问题讨论】:

您可能需要创建布局。查看[这篇文章][1]。 [1]:***.com/questions/21664555/… 我不认为是这种情况,因为集合视图及其布局已经从情节提要中初始化。我还在布局中放置了一些 nslog,并且在 RFQuiltLayout 中调用了布局函数。 【参考方案1】:

您无需在您的 didload 中再次注册该类。我想这就是你的问题背后的原因。转到您的 Storyboard 并选择您的 CollectionViewCell 并将其类更改为您的自定义类。并从您的 didLoad [self.CV registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"MyCell"];

中删除此行

【讨论】:

以上是关于将布局更改为自定义类后,UicollectionViewCell 未显示的主要内容,如果未能解决你的问题,请参考以下文章

将光标更改为自定义光标图像作为资源

如何将标签更改为与在 Xamarin 表单上显示通知相同的布局?

如何使用自定义布局显示 Firebase 通知?

Delphi - 如何自定义 IDE 布局

在我的自定义 collectionView 布局中未调用 prepare()

Spring Security - 无法将默认登录页面更改为自定义