两个集合视图中的一个未显示

时间:2017-04-17 14:47:59

标签: ios swift uicollectionview jsqmessagesviewcontroller

我一直试图在这里诊断问题,但我真的无法弄清楚出了什么问题。我有一个收集视图(消息)显示正常,直到我在导航栏中添加了一个额外的集合视图。

这是第二个集合视图(导航栏一个)的设置:

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时,我可能会重新分配变量吗?我真的不知道。这是一个屏幕截图,显示我的意思:

enter image description here

无论如何,如果有人能看到导致这种情况的原因,那么任何帮助都将受到极大的赞赏!提前谢谢。

0 个答案:

没有答案