【问题标题】:UICollectionView - distance between cells?UICollectionView - 单元格之间的距离?
【发布时间】:2013-03-09 00:21:30
【问题描述】:

我使用的是单元格宽度为 67 的 UICollectionView,现在我使用的是流式布局。

我连续有 3 个单元格,单元格之间的间距为 30 像素。如何使该距离更小,以便我可以连续放置四个单元格?这个方法和它有关系吗?

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

【问题讨论】:

    标签: ios objective-c uicollectionview storyboard uicollectionviewflowlayout


    【解决方案1】:

    不,它没有。只需更改布局的minimumInteritemSpacing

    【讨论】:

    【解决方案2】:

    这个UICollectionViewFlowLayoutDelegate 方法会帮助你..

    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionView *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section  
      {
        return 10; // This is the minimum inter item spacing, can be more
      }
    

    如果您需要更多空间来排列单元格,还可以调整edgeInsets

    【讨论】:

    • 对于无法开始使用UICollectionViewFlowLayoutDelegate 的任何人,请参阅this answer
    • 这里设置了最小值,但是如何设置最大值呢?
    • 只能保证minimumInteritemSpacing。您不能设置最大或实际项目间间距。实际值取决于项目大小、sectionInset 和 minimumInteritemSpacing。所以调整这些值以获得适当的行为。集合视图流布局动态决定实际值。
    • 其实是UICollectionViewDelegateFlowLayout
    【解决方案3】:

    您可以使用委托方法,例如:- 用于更改部分中单元格之间的空间。

    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionView *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section  
    

    用于显示不同部分的单元格之间的顶部、底部 y 填充。

    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section 
    

    // 布局:设置边缘 //设置单元格的插入

    - (UIEdgeInsets)collectionView:
    (UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
    //top,left,botttom,right
    

    【讨论】:

      【解决方案4】:

      来自this。 您需要更改 minimumInteritemSpacingminimumLineSpacing

      UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
      flow.itemSize = CGSizeMake(cellWidth, cellHeight);
      flow.scrollDirection = UICollectionViewScrollDirectionHorizontal;
      flow.minimumInteritemSpacing = 0;
      flow.minimumLineSpacing = 0;
      mainCollectionView.collectionViewLayout = flow;
      

      【讨论】:

        【解决方案5】:

        我有同样的问题..

        就我而言,我需要一个矩形单元格。

        为了达到预期的效果,我使用了 UICollectionViewDelegateFlowLayout

        这是我实现的方法之一:

        - (CGSize)collectionView:(UICollectionView *)collectionView
                          layout:(UICollectionViewLayout*)collectionViewLayout
          sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
        {
            CGFloat width = CGRectGetWidth(self.view.frame)/3.0f;
            return CGSizeMake(width, (width * 1.1f));
        }
        

        这对我来说很好用!我希望它可以帮助某人。

        【讨论】:

          【解决方案6】:

          您可以使用以下属性配置单元格或行之间的间距。
          1) 用于设置行之间的空间。

          [self.collectionView setMinimumLineSpacing:5];
          

          2) 用于设置项目/单元格之间的空间。

          [self.collectionView setMinimumInteritemSpacing:5];
          

          您也可以从 InterfaceBuilder(IB) 配置它。只需从 storyboard/Xib 文件中选择 UICollectionView 并单击 Size Inspector,如下图所示。

          【讨论】:

            【解决方案7】:

            swift 3.0

             func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
            
                if DEVICE_IDIOM == .pad {
                    return 15.0
                }
                else {
                    return 10.0
                }
            }
            

            【讨论】:

              【解决方案8】:

              斯威夫特 4.2

              func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                 return 10
              }
              
              func collectionView(_ collectionView: UICollectionView, layout
                          collectionViewLayout: UICollectionViewLayout,
                                          minimumLineSpacingForSectionAt section: Int) -> CGFloat {
              
               return 10
              }
              

              【讨论】: