Ios 如何在UICollectionViewDelegateFlowLayout中设置无间距?
我正在尝试在屏幕宽度的三分之一处执行UICollectionViewDelegateFlowLayout,每行包含3个项目。出于某种原因,它增加了间距,不符合方形布局 以下是UICollectionViewDelegateFlowLayout函数Ios 如何在UICollectionViewDelegateFlowLayout中设置无间距?,ios,swift,uicollectionview,uicollectionviewflowlayout,Ios,Swift,Uicollectionview,Uicollectionviewflowlayout,我正在尝试在屏幕宽度的三分之一处执行UICollectionViewDelegateFlowLayout,每行包含3个项目。出于某种原因,它增加了间距,不符合方形布局 以下是UICollectionViewDelegateFlowLayout函数 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt ind
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let yourWidth = (collectionView.bounds.width/3.0) - 2
let yourHeight = yourWidth
return CGSize(width: yourWidth, height: yourHeight)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
//return UIEdgeInsets.zero
return UIEdgeInsets(top: 0,left: 0,bottom: 0,right: 0);
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 1
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 1
}
请不要建议在viewDidLoad方法中向集合视图添加布局。我试过了,但没有成功,因为它删除了我的标题
class VC : UICollectionViewDelegateFlowLayout, UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let yourWidth = (collectionView.frame.width - 4)/3
// your minimumInteritemSpacing is 1, hence 4
let yourHeight = yourWidth
return CGSize(width: yourWidth, height: yourHeight)
}
}
您也可以尝试:
override func viewDidLoad() {
super.viewDidLoad()
let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout
layout?.estimatedItemSize = .init()
layout?.headerReferenceSize = .init()
}
您可以尝试使用以下代码:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let marginsAndInsets = inset * 2 + collectionView.safeAreaInsets.left + collectionView.safeAreaInsets.right + minimumInteritemSpacing * CGFloat(cellsPerRow - 1)
//set inset, minimumInteritemSpacing and cellsPerRow globally
let itemSize = ((collectionView.bounds.size.width - marginsAndInsets) / CGFloat(cellsPerRow)).rounded(.down)
return CGSize(width: itemSize, height: itemSize)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
//return UIEdgeInsets.zero
return UIEdgeInsets(top: 0,left: 0,bottom: 0,right: 0);
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 1
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 1
}
第一个不起作用。第二个有更多的代码吗?另外,如果我使用第二个,似乎删除我的标题。如何在使用第二个标题时保留标题?如何设置标题大小?我编辑了我的答案,你可以添加:layout?.headerReferenceSize=.init()我在故事板中设置标题大小。在编辑之后,这仍然不起作用。它只是显示为相同的大小,但在模拟器的顶部。(collectionView.bounds.width-2)/3.0我认为这是计算1/3宽度的公式,cellscan之间只有1像素的间距。你告诉我你的xcode版本吗?