不为collectionView调用cellForItemAtIndexPath

时间:2016-05-11 11:49:38

标签: ios objective-c uicollectionview

我在故事板中采用了UICollectionView。我也设置了datasourcedelegate。 以下方法称为

 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
 return 4;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath未被调用。

附加UICollectionView属性的屏幕截图。对此问题有任何想法吗?image 1

enter image description here

如果我隐藏了navigationBar,现在可以看到collectionView。在设置顶部约束Myheader Collection View.top = Top Layout Guide.bottom + 64时认为它位于控制器之上。在完成方法后我收到了以下警告 - - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

警告: 无法同时满足约束。     可能至少下列列表中的一个约束是您不想要的约束。     试试这个:         (1)查看每个约束并试图找出你不期望的;         (2)找到添加了不需要的约束或约束的代码并修复它。 (     “< _UILayoutSupportConstraint:0x7fda80dcff20 V:[_ UILayoutGuide:0x7fda830006f0(0)]>”,     “< _UILayoutSupportConstraint:0x7fda80daca10 V:| - (0) - [_ UILayoutGuide:0x7fda830006f0](姓名:'|':UIView:0x7fda80efb580)>”,     “”     “” )

将尝试通过违反约束来恢复

在UIViewAlertForUnsatisfiableConstraints处创建一个符号断点,以便在调试器中捕获它。 UIView中列出的UIVonstraintBasedLayoutDebugging类别中的方法也可能有所帮助。

3 个答案:

答案 0 :(得分:3)

我认为你没有正确设置流量。

因此,它不会转到- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath方法。所以,设置断点并检查每个流程布局方法。

流程布局方法的顺序调用,

viewdidload customflowlayout中的第1个将被调用,如果您已设置

 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)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section

3 - 你需要从这一行检查,//你是否正确设置

- (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);
}

第4,这个方法叫做

- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(14.0, 14.0, 0.0, 14.0);
}

和最后一个cellforitem方法被调用。所以,你的这个方法没有这么称呼,问题是在上面的方法尝试设置断点并改变单元格大小和边缘昆虫等然后尝试,

5,如果以上所有设置都正确,则在下面的方法中调用。

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

答案 1 :(得分:0)

几年前我和我的UITableView有一个类似的问题,解决方法是在故事板中将我的控件拖放到父视图中。

在Objective-C代码中设置值似乎不够......

enter image description here

此处详细信息:

Setting DataSource and delegate

答案 2 :(得分:0)

validates :name, uniqueness: { scope: :post_id }

上面一行解决了我的问题。