Ios collectionView未调用cellForItemAtIndexPath
我在故事板中拍摄了Ios collectionView未调用cellForItemAtIndexPath,ios,objective-c,uicollectionview,Ios,Objective C,Uicollectionview,我在故事板中拍摄了UICollectionView。我还设置了datasource和delegate。 下面的方法被调用 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ return 4; } 但是未调用-(UICollectionViewCell*)collectionView:(UICollectionView*)colle
UICollectionView
。我还设置了datasource
和delegate
。
下面的方法被调用
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return 4;
}
但是未调用-(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
附加UICollectionView
属性的屏幕截图。你知道这个问题吗
现在,如果隐藏导航栏,则collectionView可见。在have set top constraintMyheader Collection View.top=top Layout Guide.bottom+64中,认为它位于控制器的顶部。在完成方法--(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
后,我收到以下警告
警告:
能够同时满足约束。
可能下面列表中至少有一个约束是您不想要的。
试试这个:
(1) 看看每一个约束,试着找出你不期望的;
(2) 找到添加了不需要的约束的代码,然后修复它。
(
"",
"",
"",
""
)
将尝试通过打破约束进行恢复
在UIViewAlertForUnsatifiableConstraints处创建一个符号断点,以便在调试器中捕获该断点。
中列出的UIView上UIConstraintBasedLayoutDebugging类别中的方法可能也会有所帮助。我认为您没有正确设置流
因此,它不会转到-(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
方法。因此,设置断点并检查每个流布局方法
流布局方法的顺序调用
如果您设置了
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
float ratio = self.aCollectionView.frame.size.width/3;
[flowLayout setItemSize:CGSizeMake(ratio, ratio)];
[flowLayout setMinimumInteritemSpacing:0];
[flowLayout setMinimumLineSpacing:0];
第二,在你的例子中,这个方法也叫做
-(NSInteger)集合视图:(UICollectionView*)视图编号项节:(NSInteger)节
第三-您需要从这一行检查,//您是否正确设置了它
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
float width = collectionView.frame.size.width/3;//120
float height = collectionView.frame.size.height/4;//120
return CGSizeMake(width-17,height-14);
}
第四,这种方法称为
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(14.0, 14.0, 0.0, 14.0);
}
最后在这里调用cellforitem
方法。所以,你们的这个方法不叫那个么,问题是在上面的方法中尝试设置断点,改变细胞大小和边缘昆虫等,然后尝试
第五,如果上面所有的设置都正确的话,下面的方法调用
-(UICollectionViewCell*)collectionView:(UICollectionView*)cv cellForItemAtIndexPath:(NSIndexPath*)indexPath
几年前,我的UITableView
也遇到了类似的问题,解决方案是在情节提要中将“n”从我的控件拖到父视图
仅仅在我的Objective-C代码中设置值似乎是不够的
详情如下:
上面的一行解决了我的问题。是否调用了numberOfItemsInSection
?您指定了多少节
?我指定了1节。运行应用程序后您看到了什么?一个项目还是一个项目都没有?尝试增加collectionView的高度。如果不合适,它可能不会尝试显示项目(即使理论上contentSize和“visible”框架不同,也不应该是问题)。尝试在viewDidLoad上以编程方式设置委托和数据源
[myCollectionView setContentInset:UIEdgeInsetsMake(100, 0, 0, 0)];