【问题标题】:UICollectionView, simply fit cell to width?UICollectionView,只是让单元格适合宽度?
【发布时间】:2014-09-14 22:19:27
【问题描述】:

这是一个简单的黄色 UICollectionView

红色箭头设置单元格的宽度。 (待定:点击粉红色单元格:对于“大小”选择“默认”,然后您在红色箭头处设置的内容将成为单元格的大小。)

例如,直立 iPhone 设置宽度为 320。

但这似乎很疯狂......我当然可以设置单元格宽度基于 UICollectionView 的宽度

自动调整视图本身没有问题..

效果很好。

但我无法将 CELL 的宽度设置为“与视图相同”,这似乎很疯狂。似乎很难相信必须在代码中手动设置?

TBC 换句话说,正如 Nikita 指出的那样,

-(CGSize) collectionView:(UICollectionView *)collectionView
     layout:(UICollectionViewLayout *)collectionViewLayout
     sizeForItemAtIndexPath:(NSIndexPath *)indexPath
    {
    return self.view.frame.size;
    }

(实际上你通常也需要这个......)

-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView
   layout:(UICollectionViewLayout*)collectionViewLayout
   insetForSectionAtIndex:(NSInteger)section
    {
    return UIEdgeInsetsMake(0,0,0,0);   //t,l,b,r
    }

事实上 - 你必须在代码中做到这一点?!在情节提要、自动布局或其他任何东西中没有办法做到这一点?!

【问题讨论】:

  • 在swift中,你可以这样做func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { return .zero }

标签: ios uicollectionview uicollectionviewcell


【解决方案1】:

我觉得你需要看看

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

UICollectionViewLayout,您可以在其中根据方向和当前帧设置大小。


看起来您确实只需要在代码中执行此操作。

【讨论】:

  • 感谢您的及时答复;我听到你了。但是再一次 - 您必须在代码中执行此操作似乎令人难以置信?在 iOS 中,每一种其他类型的视图(据我所知),您都可以简单地指出它会拉伸以填充它所在的容器视图,对吗?再次感谢...
  • @JoeBlow 我认为这不是 Cells 的情况。它们的设计不是为了拉伸到父母的大小。但如果你找到解决方案 - 请告诉我:)
  • 大声笑……也许就是这样。对于我的下一个问题,为什么牢房不会坐在视图的底部!?该死!
  • @NikitaTook 我同意,但在某些情况下,UITableView 也比 tableViewFooter 和节页脚/页眉之类的集合视图更好。并不是因为 UICollectionView 的存在,我们就应该停止考虑使用表视图。
  • 对我来说很明显这应该可以正常工作。我在 iPhone 和 iPad 上使用相同的故事板。在 iPhone 上,行为将是单元格与屏幕宽度匹配。在 iPad 上,我将使用具有不同布局的不同单元格 xib。是的,这意味着我实际上是在将集合视图转换为 iPhone 上的表格视图,但这正是我在这种情况下希望做的事情。
【解决方案2】:

我的案例单元格插图制作了额外的形状

【讨论】:

    【解决方案3】:

    有一个简单的方法可以做到这一点。这是快速代码。假设您想要一个项目宽,在示例中我的单元格是 64 pts 高,我想要 8 pts 作为边距,最后 collectionView 是您的 UICollectionView 的名称。

    将其插入 viewDidLoad :

        let layout = collectionView?.collectionViewLayout as! UICollectionViewFlowLayout
        layout.itemSize = CGSize.init(width: (UIScreen.main.bounds.width - 16), height: 64.0)
    

    这会将所有单元格设置为默认大小。如果您将 UICollectionViewLayout 或 UICollectionViewFlowLayout 子类化,您仍然可以覆盖单个单元格,如其他答案中所述。但是,如果您只是想拥有更多类似表视图的行为,这应该可行。

    【讨论】: