我一直试图在这里诊断问题,但我真的无法弄清楚出了什么问题。我有一个收集视图(消息)显示正常,直到我在导航栏中添加了一个额外的集合视图。
这是第二个集合视图(导航栏一个)的设置:
let navBarCollectionView: UICollectionView = UICollectionView(frame: CGRect(x: CGFloat(70), y: CGFloat(0), width: CGFloat(500), height: CGFloat(40)), collectionViewLayout: UICollectionViewFlowLayout.init())
viewDidLoad中:
// Nav Bar collection view
let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout.init()
navBarCollectionView.setCollectionViewLayout(layout, animated: true)
navBarCollectionView.backgroundColor = UIColor.clear
navBarCollectionView.register(NavBarCell.self, forCellWithReuseIdentifier: "cell")
navBarCollectionView.delegate = self
navBarCollectionView.dataSource = self
layout.scrollDirection = .horizontal
self.navigationController?.navigationBar.addSubview(navBarCollectionView)
navBarCollectionView.reloadData()
然后,我所做的就是从
更改集合视图方法override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return messages.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = super.collectionView(collectionView, cellForItemAt: indexPath) as! JSQMessagesCollectionViewCell
let message = messages[indexPath.item]
if message.senderId == senderId {
cell.textView?.textColor = UIColor.white
} else {
cell.textView?.textColor = UIColor.black
}
return cell
}
到
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if collectionView == navBarCollectionView {
return 30
} else {
return messages.count
}
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if collectionView == navBarCollectionView {
let navBarCell = (collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)) as! NavBarCell
navBarCell.avatarImageView.loadImageUsingCacheWithUrlString("https://graph.facebook.com/*removed*/picture?type=large&return_ssl_resources=1")
navBarCell.avatarImageView.clipsToBounds = true
navBarCell.avatarImageView.layer.borderWidth = 1.5
navBarCell.avatarImageView.layer.borderColor = UIColor.getRandomColor().cgColor
navBarCell.avatarImageView.layer.cornerRadius = 20
return navBarCell
} else {
let cell = super.collectionView(collectionView, cellForItemAt: indexPath) as! JSQMessagesCollectionViewCell
let message = messages[indexPath.item]
if message.senderId == senderId {
cell.textView?.textColor = UIColor.white
} else {
cell.textView?.textColor = UIColor.black
}
return cell
}
}
换句话说,只添加了一些if/else
语句以适应两个集合视图。这个CV方法也适用于JSQMessages
框架(换句话说,不影响第二个集合视图,只影响消息):
override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageDataForItemAt indexPath: IndexPath!) -> JSQMessageData! {
return messages[indexPath.item]
}
我添加了导航栏集合所需的那个:
override func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: CGFloat(40), height: CGFloat(40))
}
使用此代码,导航栏集合视图显示正常,但消息不再存在。使用印刷语句,我可以看到messages
,并且确实有数据,它们只是没有显示。
如果我恢复使用原始集合视图方法(没有if/else
s的方法),消息显示正常,但显然导航栏集合不再存在。它就像一个或另一个。
谁能看到这里出了什么问题?我不确定这是否是JSQMessages
特有的问题。唯一看起来可能搞乱的事情是,消息集合视图只是被称为collectionView
,所以当我说if collectionView == navBarCollectionView
时,我可能会重新分配变量吗?我真的不知道。这是一个屏幕截图,显示我的意思:
无论如何,如果有人能看到导致这种情况的原因,那么任何帮助都将受到极大的赞赏!提前谢谢。