将布局更改为自定义后 UicollectionViewCell 未显示 class
UicollectionViewCell not showing up after changing the Layout to custom class
我正在为我的 uicollectionview
使用 RFQuiltLayout。
我的故事板包含 Uiview
+ collectionview
。 collectionview 是 IBOutleted
到我的 UiView
class 并且在我的情节提要中我正在为我的 collectionview 使用自定义布局,如下所示:
我正在从 appdelegate
class 加载我的 collectionview 数据,所以首先 运行 它 return 0
对于 numberOfItemsInSection
和之后从服务器获取数据,它将加载我的集合视图。
现在的问题是,如果我将 Layout 更改为 flow 程序可以正常工作,但如果我使用 custome class,例如 RFQuiltLayout
,则不会显示任何单元格,
numberOfItemsInSection return 是我的实际值,但 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" 未被调用。
您不需要在您的 didload 中再次注册 class。我想这就是你的问题背后的原因。转到 Storyboard 和 select 您的 CollectionViewCell
并将其 class 更改为您的自定义 class。并从你的 didLoad [self.CV registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"MyCell"];
中删除这一行
我正在为我的 uicollectionview
使用 RFQuiltLayout。
我的故事板包含 Uiview
+ collectionview
。 collectionview 是 IBOutleted
到我的 UiView
class 并且在我的情节提要中我正在为我的 collectionview 使用自定义布局,如下所示:
我正在从 appdelegate
class 加载我的 collectionview 数据,所以首先 运行 它 return 0
对于 numberOfItemsInSection
和之后从服务器获取数据,它将加载我的集合视图。
现在的问题是,如果我将 Layout 更改为 flow 程序可以正常工作,但如果我使用 custome class,例如 RFQuiltLayout
,则不会显示任何单元格,
numberOfItemsInSection return 是我的实际值,但 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" 未被调用。
您不需要在您的 didload 中再次注册 class。我想这就是你的问题背后的原因。转到 Storyboard 和 select 您的 CollectionViewCell
并将其 class 更改为您的自定义 class。并从你的 didLoad [self.CV registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"MyCell"];