Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 最后一个UICollectionViewCell与其他单元格不同_Swift - Fatal编程技术网

Swift 最后一个UICollectionViewCell与其他单元格不同

Swift 最后一个UICollectionViewCell与其他单元格不同,swift,Swift,我正在我的主菜单上创建一个UICollectionView,所有的单元格在最后一个单元格上看起来都很好,图像没有相对于单元格居中-它似乎被定位到单元格的左上角(但对此不确定) 这是包含问题的图像。 我真的不知道从哪里开始,因为所有的单元格都使用相同的代码和约束。 我通过重复以前使用过的图像(参见上面的屏幕截图)来检查这不是图像问题 我唯一的想法是,最后一个单元格单独在一行中,而其他行每行有两个单元格 扩展主菜单视图控制器:UICollectionViewDataSource,UICollect

我正在我的主菜单上创建一个
UICollectionView
,所有的单元格在最后一个单元格上看起来都很好,图像没有相对于单元格居中-它似乎被定位到单元格的左上角(但对此不确定)

这是包含问题的图像。

我真的不知道从哪里开始,因为所有的单元格都使用相同的代码和约束。 我通过重复以前使用过的图像(参见上面的屏幕截图)来检查这不是图像问题

我唯一的想法是,最后一个单元格单独在一行中,而其他行每行有两个单元格

扩展主菜单视图控制器:UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{
func collectionView(collectionView:UICollectionView,numberOfItemsInSection:Int)->Int{
返回mainMenuOptions.count
}
func collectionView(collectionView:UICollectionView,cellForItemAt indexPath:indexPath)->UICollectionViewCell{
让cell=collectionView.dequeueReuseAbleCell(带有ReuseIdentifier:“MainMenuCell”,for:indexPath)作为!MainMenuCollectionViewCell
让imageView=cell.mainMenuImage!
让label=cell.mainMenuLabel!
imageView.image=mainMenuImages[indexPath.item]
imageView.frame.size.height=cell.frame.size.width-5
imageView.frame.size.width=cell.frame.size.width-10
cell.mainMenuLabel.text=mainMenuOptions[indexPath.item]
让labelText=cell.mainMenuLabel!
label.frame.size.height=Utils.heightForView(文本:labelText.text!,字体:labelText.font!,宽度:cell.frame.width)
label.frame.size.width=cell.frame.size.width
label.center.x=cell.frame.size.width/2
label.center.y=cell.mainMenuImage.frame.size.height+(cell.frame.size.height-cell.mainMenuImage.frame.size.height)/2
cell.layer.borderColor=UIColor.darkGray.cgColor
cell.layer.borderWidth=CGFloat(0.5)
cell.layer.cornerRadius=CGFloat(10)
返回单元
}
func collectionView(collectionView:UICollectionView,布局collectionViewLayout:UICollectionViewLayout,sizeForItemAt indexPath:indexPath)->CGSize{
让cell=collectionView.dequeueReuseAbleCell(带有ReuseIdentifier:“MainMenuCell”,for:indexPath)作为!MainMenuCollectionViewCell
让填充:CGFloat=40
让cellWidth=(collectionView.frame.size.width-padding)/2
让labelText=mainMenuOptions[indexPath.item]
让cellHeight=cellWidth+Utils.heightForView(文本:labelText,字体:cell.mainMenuLabel.font!,宽度:cell.frame.width)+70
返回CGSize(宽度:cellWidth,高度:cellHeight)
}
}
Utils.heightForView()
只是一个函数,用于计算标签适合所有文本所需的大小。如果你需要看的话,我很乐意添加它

非常感谢!我希望这是正确数量的代码需要,但如果不让我知道,我会添加更多

编辑:单元类

class MainMenuCollectionViewCell:UICollectionViewCell{
@IBVAR主菜单标签:UILabel!
@IBVAR主菜单图像:UIImageView!
}

当您将
cellForItem
中的一个单元格出列时,它不一定在该点上有其最终大小,但您的代码是否正常工作取决于此

您应该在单元格内使用自动布局约束或堆栈视图,以提供正确的布局,而无需在出列时执行任何工作


你似乎也在尝试为你的单元格指定不同的高度,这在流布局中看起来会很混乱,尽管这似乎不会对屏幕截图中的单元格造成任何影响,我希望这些单元格的标题会有不同的高度。在
sizeForItem
中对单元格进行出列也可能会产生一些意外的副作用,因为这会扰乱重用池。

当您在
cellForItem
中对单元格进行出列时,它不一定在该点具有最终大小,但您的代码是否正常工作取决于此

您应该在单元格内使用自动布局约束或堆栈视图,以提供正确的布局,而无需在出列时执行任何工作


你似乎也在尝试为你的单元格指定不同的高度,这在流布局中看起来会很混乱,尽管这似乎不会对屏幕截图中的单元格造成任何影响,我希望这些单元格的标题会有不同的高度。在
sizeForItem
中将单元格出列也可能会产生一些意外的副作用,因为这会扰乱重用池。

尝试向数据源中再添加一个单元格。看看会发生什么。原始单元格和额外单元格都有相同的问题我认为问题在于,当您重新使用单元格时,您没有重置所有内容。你能显示你的单元格类吗?在上面的编辑中添加:)尝试向数据源添加一个以上的单元格。看看会发生什么。原始单元格和额外单元格都有相同的问题我认为问题在于,当您重新使用单元格时,您没有重置所有内容。你能展示你的细胞类吗?在上面的编辑中添加:)好的,我想我明白你的意思了。我以前尝试过使用自动布局约束,但后来我的图像变得非常古怪。我会继续使用自动布局,看看它能给我带来什么。非常感谢你的帮助!我会从一个垂直的堆栈视图开始,它被固定在单元格的边缘,然后把图像视图和标签放在里面。谢谢你的建议!我已经这样做了,并摆脱了所有其他无用的代码。如果我想根据屏幕大小动态调整单元格大小(这正是我最初想要的),我可以通过自动布局约束来实现吗?还是应该通过编程来实现?你需要在你的大小del中实现这一点