繁体   English   中英

如何在CollectionView中自动布局ImageView,以便单元格到边缘具有与内部单元格间距相同的间距?

[英]How to autolayout ImageView inside CollectionView so that cell to edge has same spacing as inner cells spacing?

我在CollectionViewCell中创建了UIImageView。 我希望布局在最左边的单元格到左边缘之间具有相同的间距,作为内部单元格之间的间距,以及最右边的单元格到屏幕右边缘的相同间距。 我当前的布局是这样的:

这张图片如下


在上图中,左边缘到左边的单元格具有10个点间距,而内部单元格间距是其两倍。 那是因为我的UIImageView在所有4个方向(向上,向下,向左,向右)上比CollectionViewCell小10个点。


我花了很多时间在这个问题上,包括搜索StackOverflow,但似乎无法找到答案。


根据此帖子,连续创建N个单元格没有问题
而且我也按照这个帖子玩了单元格间距

我设法找到了上述问题的解决方案。

我做了以下事情:

  1. 删除UIImageViewCollectionViewCell之间的所有内部空间。 然后删除任何偏移量并使大小匹配。 在所有4个方向上放置0的约束。
  2. 使用上面提到第二个参考作为模板。 我用以下内容更新了我的ViewController:

    扩展ToDoCategoryViewController:UICollectionViewDelegateFlowLayout {

     fileprivate var sectionInsets: UIEdgeInsets { return UIEdgeInsetsMake(0, Constant.hardCodedPadding, 0, Constant.hardCodedPadding) } fileprivate var innerSpacing: CGFloat { return Constant.hardCodedPadding } fileprivate var rowSpacing: CGFloat { return Constant.hardCodedPadding } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { var itemPerRow: CGFloat { switch collectionView.bounds.width { case 300..<500: return 3 case 500..<800: return 4 default: return 5 } } let innerSpacingCount = itemPerRow - 1 let edgesPadding = Constant.hardCodedPadding * 2.0 let itemWidth = (collectionView.bounds.width - (innerSpacing * innerSpacingCount + edgesPadding)) / itemPerRow let itemHeight = itemWidth * CGFloat(1.25) return CGSize(width: itemWidth, height: itemHeight) } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { return sectionInsets } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { return rowSpacing } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { return innerSpacing } 

    }

在其他地方的代码中,我设置了Constant.hardcodedPadding值,例如CGFloat(30.0)

因此,我得到以下观点: 内外相同的间距

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM