我真的不知道为什么我的 collectionViewCell 消失了
I really don't know why my collectionViewCell disappear
我制作了一个日历,所以首先我制作了一个这样的数组 [0,0,0,0,1,2,3,4,...,31] by thing.optimize(month: 5 ).在这个数组中,我在 1,2,3,...,31 前面加上 0 的原因是
当我制作单元格时,我使用 if
语句所以 if cell.text == 0
然后我设置 cell.isHidden = true
。
当我 select 一个单元格时,我重新加载两个 collectionView(collectionView,nextMonthCollectionView)
并制作圆形红色。
当我select另一个按钮时,出现问题,
突然细胞消失了。我添加了一张照片。
首先,这是我的代码。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var nowMonthName: UILabel!
@IBOutlet weak var nextMonthName: UILabel!
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var nextMonthCollectionView: UICollectionView!
var thing = realOptimaize()
var selectedIndex : IndexPath?
var items = [UIBarButtonItem]()
var forCollectionViewCount : Int?
var monthData : Array<Int>?
var nextMonthData : Array<Int>?
override func viewDidLoad() {
monthData = thing.optimaize(month: 5)
nextMonthData = thing.optimaize(month: 6)
self.title = String(CalenderBrain.init().curruntYear)
nowMonthName.text = String(CalenderBrain.init().curruntMonthName())
nextMonthName.text = String(CalenderBrain.init().nextMonthName())
self.collectionView.dataSource = self
self.collectionView.delegate = self
self.nextMonthCollectionView.dataSource = self
self.nextMonthCollectionView.delegate = self
self.collectionView.register(UINib(nibName: "CollectionViewCell", bundle: nil), forCellWithReuseIdentifier : "MyCell")
self.nextMonthCollectionView.register(UINib(nibName: "NextMonthCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "MyCell2")
//이해가 잘 안가는 부분!!!
if let layout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout{
layout.minimumInteritemSpacing = -0.2
}
if let layout2 = self.nextMonthCollectionView.collectionViewLayout as? UICollectionViewFlowLayout{
layout2.minimumInteritemSpacing = -0.2
}
}
}
`extension ViewController : UICollectionViewDataSource, UICollectionViewDelegate,` UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if collectionView == self.nextMonthCollectionView {
forCollectionViewCount = nextMonthData!.count
return forCollectionViewCount!
} else {
forCollectionViewCount = monthData!.count
return forCollectionViewCount!
}
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if collectionView == self.nextMonthCollectionView{
let forCollectionViewCell = nextMonthCollectionView.dequeueReusableCell(withReuseIdentifier: "MyCell2", for: indexPath) as! NextMonthCollectionViewCell
// forCollectionViewCell.button.tag = indexPath.item
if nextMonthData![indexPath.row] == 0 {
forCollectionViewCell.isHidden = true
} else {
forCollectionViewCell.Label.text = String(nextMonthData![indexPath.row])
}
return forCollectionViewCell
} else {
let forCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! CollectionViewCell
// forCollectionViewCell.button.tag = indexPath.item + 100
if monthData![indexPath.row] == 0 {
forCollectionViewCell.isHidden = true
} else {
forCollectionViewCell.Label.text = String(monthData![indexPath.row])
}
return forCollectionViewCell
}
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if collectionView == nextMonthCollectionView {
return .init(width: 53.25 , height: 67)
} else{
return .init(width: 53.25 , height: 67)
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if collectionView == self.nextMonthCollectionView {
let forCollectionViewCell = collectionView.cellForItem(at: indexPath) as! NextMonthCollectionViewCell
self.collectionView.reloadData()
collectionView.reloadData()
forCollectionViewCell.Label.textColor = .white
forCollectionViewCell.Label2.backgroundColor = .red
forCollectionViewCell.Label2.layer.cornerRadius = 0.5 * forCollectionViewCell.Label2.bounds.size.width
forCollectionViewCell.Label2.clipsToBounds = true
}else{
let forCollectionViewCell = collectionView.cellForItem(at: indexPath) as! CollectionViewCell
self.nextMonthCollectionView.reloadData()
collectionView.reloadData()
forCollectionViewCell.Label.textColor = .white
forCollectionViewCell.Label2.backgroundColor = .red
forCollectionViewCell.Label2.layer.cornerRadius = 0.5 * forCollectionViewCell.Label2.bounds.size.width
forCollectionViewCell.Label2.clipsToBounds = true
}
}
}
这是我的照片。这第一张照片是在我按下任何单元格之前。
enter image description here
这第二张照片是我按下 13cell 后的照片。
我真的不知道为什么会这样。
我搜索 google 寻找此信息,但没有找到答案。
enter image description here
ps) 当我不使用 reloadData() 函数时..我没有收到错误..但是
我必须使用 reloadData.. 因为我必须清理我的 collectionView,然后制作一个新的 selected 单元格圆形红色单元格。
`if nextMonthData![indexPath.row] == 0 {
forCollectionViewCell.isHidden = true
} else {
forCollectionViewCell.isHidden =false
forCollectionViewCell.Label.text = String(nextMonthData![indexPath.row])
}
return forCollectionViewCell
}
`
设置其他条件将解决您的问题。
其背后的原因是当集合视图出队单元格可能是该单元格已经隐藏,这就是它消失的原因。
我制作了一个日历,所以首先我制作了一个这样的数组 [0,0,0,0,1,2,3,4,...,31] by thing.optimize(month: 5 ).在这个数组中,我在 1,2,3,...,31 前面加上 0 的原因是
当我制作单元格时,我使用 if
语句所以 if cell.text == 0
然后我设置 cell.isHidden = true
。
当我 select 一个单元格时,我重新加载两个 collectionView(collectionView,nextMonthCollectionView)
并制作圆形红色。
当我select另一个按钮时,出现问题,
突然细胞消失了。我添加了一张照片。
首先,这是我的代码。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var nowMonthName: UILabel!
@IBOutlet weak var nextMonthName: UILabel!
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var nextMonthCollectionView: UICollectionView!
var thing = realOptimaize()
var selectedIndex : IndexPath?
var items = [UIBarButtonItem]()
var forCollectionViewCount : Int?
var monthData : Array<Int>?
var nextMonthData : Array<Int>?
override func viewDidLoad() {
monthData = thing.optimaize(month: 5)
nextMonthData = thing.optimaize(month: 6)
self.title = String(CalenderBrain.init().curruntYear)
nowMonthName.text = String(CalenderBrain.init().curruntMonthName())
nextMonthName.text = String(CalenderBrain.init().nextMonthName())
self.collectionView.dataSource = self
self.collectionView.delegate = self
self.nextMonthCollectionView.dataSource = self
self.nextMonthCollectionView.delegate = self
self.collectionView.register(UINib(nibName: "CollectionViewCell", bundle: nil), forCellWithReuseIdentifier : "MyCell")
self.nextMonthCollectionView.register(UINib(nibName: "NextMonthCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "MyCell2")
//이해가 잘 안가는 부분!!!
if let layout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout{
layout.minimumInteritemSpacing = -0.2
}
if let layout2 = self.nextMonthCollectionView.collectionViewLayout as? UICollectionViewFlowLayout{
layout2.minimumInteritemSpacing = -0.2
}
}
}
`extension ViewController : UICollectionViewDataSource, UICollectionViewDelegate,` UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if collectionView == self.nextMonthCollectionView {
forCollectionViewCount = nextMonthData!.count
return forCollectionViewCount!
} else {
forCollectionViewCount = monthData!.count
return forCollectionViewCount!
}
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if collectionView == self.nextMonthCollectionView{
let forCollectionViewCell = nextMonthCollectionView.dequeueReusableCell(withReuseIdentifier: "MyCell2", for: indexPath) as! NextMonthCollectionViewCell
// forCollectionViewCell.button.tag = indexPath.item
if nextMonthData![indexPath.row] == 0 {
forCollectionViewCell.isHidden = true
} else {
forCollectionViewCell.Label.text = String(nextMonthData![indexPath.row])
}
return forCollectionViewCell
} else {
let forCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! CollectionViewCell
// forCollectionViewCell.button.tag = indexPath.item + 100
if monthData![indexPath.row] == 0 {
forCollectionViewCell.isHidden = true
} else {
forCollectionViewCell.Label.text = String(monthData![indexPath.row])
}
return forCollectionViewCell
}
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if collectionView == nextMonthCollectionView {
return .init(width: 53.25 , height: 67)
} else{
return .init(width: 53.25 , height: 67)
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if collectionView == self.nextMonthCollectionView {
let forCollectionViewCell = collectionView.cellForItem(at: indexPath) as! NextMonthCollectionViewCell
self.collectionView.reloadData()
collectionView.reloadData()
forCollectionViewCell.Label.textColor = .white
forCollectionViewCell.Label2.backgroundColor = .red
forCollectionViewCell.Label2.layer.cornerRadius = 0.5 * forCollectionViewCell.Label2.bounds.size.width
forCollectionViewCell.Label2.clipsToBounds = true
}else{
let forCollectionViewCell = collectionView.cellForItem(at: indexPath) as! CollectionViewCell
self.nextMonthCollectionView.reloadData()
collectionView.reloadData()
forCollectionViewCell.Label.textColor = .white
forCollectionViewCell.Label2.backgroundColor = .red
forCollectionViewCell.Label2.layer.cornerRadius = 0.5 * forCollectionViewCell.Label2.bounds.size.width
forCollectionViewCell.Label2.clipsToBounds = true
}
}
}
这是我的照片。这第一张照片是在我按下任何单元格之前。 enter image description here
这第二张照片是我按下 13cell 后的照片。 我真的不知道为什么会这样。 我搜索 google 寻找此信息,但没有找到答案。
enter image description here
ps) 当我不使用 reloadData() 函数时..我没有收到错误..但是 我必须使用 reloadData.. 因为我必须清理我的 collectionView,然后制作一个新的 selected 单元格圆形红色单元格。
`if nextMonthData![indexPath.row] == 0 {
forCollectionViewCell.isHidden = true
} else {
forCollectionViewCell.isHidden =false
forCollectionViewCell.Label.text = String(nextMonthData![indexPath.row])
}
return forCollectionViewCell
}
`
设置其他条件将解决您的问题。 其背后的原因是当集合视图出队单元格可能是该单元格已经隐藏,这就是它消失的原因。