CollectionViewCell 边距?

Posted

技术标签:

【中文标题】CollectionViewCell 边距?【英文标题】:CollectionViewCell margin? 【发布时间】:2017-11-15 09:46:36 【问题描述】:

我有一个UICollectionView,其中有一些已出列的自定义单元格。正如您从屏幕截图中看到的那样,有一个奇怪的边距,我无法弄清楚这是从哪里来的。棕色/橙色是UICollectionView,灰色是UICollectionViewCell

我正在为该单元格使用 xib 文件,因为我需要许多自定义单元格。

生成UICollectionView 的代码没有任何东西会导致这个边距。

extension DashVC: UICollectionViewDelegate, UICollectionViewDataSource

    func numberOfSections(in collectionView: UICollectionView) -> Int 
        return 1
    

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PostImageCell", for: indexPath) as! PostImageCell
        let post = posts[indexPath.row]
        let user = users[indexPath.row]
        cell.post = post
        cell.user = user
        cell.delegate = self
        return cell
    

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return posts.count
    

    func setCollectionViewDelegatesAndRowHeight()
    
        collectionView.dataSource = self
        collectionView.delegate = self
    

更新:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,   sizeForItemAt indexPath: IndexPath) -> CGSize

    let width = Int(UIScreen.main.bounds.width)
    let height = 407
    let size = CGSize(width: width, height: height)
    return size

【问题讨论】:

单元格的大小与collectionview的宽度不同!提供collectionViewCell的大小等于collectionview的宽度! 你说的是哪个边距?您的屏幕截图上有几个。 @SaurabhPrajapati 我尝试使用let width = Int(collectionView.frame.width),但它仍然不起作用。边距保持 【参考方案1】:

您的UICollectionView 宽度为 375,UICollectionViewCell 宽度为 320。您看到了不同之处。要使单元格与屏幕一样宽,您可以使控制器符合UICollectionViewDelegateFlowLayout,并实现以下方法:

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;
    cellHeight = 407.0
    CGSize size = CGSizeMake(screenWidth, cellHeight);

    return size;

【讨论】:

我试过了,但还是不行。我已经更新了我上面的问题。请看那个。此外,单元格的高度需要是动态的,因为它可能包含也可能不包含超过 1 张照片和/或内容 你可以使用cellForItemAt得到想要的高度,而不是硬编码为407。至于宽度不起作用,你把它放在extension UICollectionViewDelegateFlowLayout吗?如果你这样做了,你能不能放置一个断点/调试日志,看看函数是否被调用? 啊,我忘了UICollectionViewDelegateFlowLayout 作为扩展名!这是正确的。我如何获得动态高度?我知道我可以使用cellForItemAt,但我不确定如何实现。有什么建议吗? 您可以通过调用cell.contentView.frame.size.height获取indexPath的单元格高度。 嗯,我尝试创建var cellHeight = CGFloat(),然后为cellForItemAt indexPath 创建cellHeight = cell.contentView.frame.size.height 以获取当前单元格大小,然后使用cellHeight 将其设置为@ 中的高度987654334@ 但它什么也没返回。只有UICollectionView,没有任何单元格。

以上是关于CollectionViewCell 边距?的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 3 - 小屏幕上的列顶部边距

如何在 ionic 中删除 ion-row 和 ion-col 的空间(边距/填充)?

引导卡列填充/边距溢出

我无法在 WordPress 网站中为置顶位置添加边距

Flutter 布局容器边距

HTML/CSS 表格垂直边距