[英]How to autolayout ImageView inside CollectionView so that cell to edge has same spacing as inner cells spacing?
我设法找到了上述问题的解决方案。
我做了以下事情:
UIImageView
和CollectionViewCell
之间的所有内部空间。 然后删除任何偏移量并使大小匹配。 在所有4个方向上放置0的约束。 使用上面提到的第二个参考作为模板。 我用以下内容更新了我的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.