我在按下UICollectionView
按钮时显示并隐藏UICollectionViewCell
的页脚视图。
要显示UICollectionView
的页脚视图,我在x
中将高度设为collectionView(_:layout :referenceSizeForFooterInSection)
,并将同一方法中的传递高度隐藏为0
。
用于检测是否需要显示或隐藏footerView我在同一方法中获取UICollectionViewCell
并根据需要进行检查。
但这里是我遇到问题的事件的步骤。
我做了一些调试并且知道在回到应用程序后我无法获取UICollectionViewCell它返回nil。到this answer我发现,如果UICollectionViewCell
不可见,那么它将返回nil
。所以我在1之后通过调用self.collectionView?.collectionViewLayout.invalidateLayout()
重新加载了FooterView viewWillAppear
中的第二个
但是,当FooterView扩展时,仍然没有得到结果。
这是我的代码
override func viewWillAppear(_ animated: Bool) {
var isAnyExpanded = false
...
//Checking if any I need to display footerView of not
...
if isAnyExpanded {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.collectionView?.collectionViewLayout.invalidateLayout()
}
}
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
...
//other conditions
...
else if messages.count > 0 {
let message = messages[0]
if message.message_type == .hotel {
var cellHeight:CGFloat = 0
if let hotels = arrHotel[message.msg] {
let outerIndexPath = IndexPath(item: 0, section: section)
if let hotelCell = collectionView.cellForItem(at: outerIndexPath) as? HotelParentCollectionViewCell { //This is where getting nil after coming back from recent app
let visibleIndexPaths = hotelCell.subCollectionView.indexPathsForVisibleItems
if visibleIndexPaths.count > 0 {
let firstIndexPath = visibleIndexPaths[0]
let hotel = hotels[firstIndexPath.item]
if hotel.isExpanded
{
//Calculation for height
}
}
}
}
return CGSize(width: 0, height: cellHeight)
}
...
//other conditions
...
}
return CGSize(width: 0, height: 0)
}
@objc func btnHotelDetailSelect(sender: UIButton) {
var section = 0
if sender.tag > 1000 {
section = sender.tag / 1000
}
let item = sender.tag - (section * 1000)
let message = arrMessageTmp[section][item]
if let hotels = arrHotel[message.msg] {
let hotel = hotels[item]
if hotel.isExpanded {
hotel.isExpanded = false
}
else {
for hotels in arrHotel.values {
let expandedHotels = hotels.filter({$0.isExpanded})
for hotel in expandedHotels {
hotel.isExpanded = false
}
}
hotel.isExpanded = true
}
collectionView?.collectionViewLayout.invalidateLayout()
}
}
请帮我解决这个问题。