导航集合视图时导航栏已损坏



我正在构建一个由4个选项卡组成的选项卡栏应用程序。每个选项卡都是嵌入在导航控制器中的集合视图控制器。我遇到了加载的第一个视图控制器的问题。

如上所述,第一个视图控制器是uicollectionviewcontroller的子类。集合由不同类型的单元格组成。当每个单元格都被选中时,我会执行一个新的视图控制器,其中包含该单元格的详细信息。当我点击一个单元格,然后向右滑动返回时,我会得到以下错误:

nested push animation can result in corrupted navigation bar

此网站上有许多关于此特定错误消息的主题。我都读过了,但还是解决不了这个问题。我的错误特别奇怪,原因有几个:

  • 只有当我向后滑动(而不是按下导航控制器中的后退按钮)时才会发生这种情况
  • 只有当我还没有转到应用程序中的任何其他选项卡时,才会发生这种情况。如果我打开应用程序,转到另一个选项卡,然后返回到默认选项卡,导航就可以完美地工作

作为参考,以下是我的一些相关代码(很抱歉很乱):

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    var segueId: String?
    switch self.cards[indexPath.item].type {
        case "standard", "text":
            segueId = "showCard"
            break
        case "question":
            segueId = "showQuestion"
            break
        default:
            segueId = nil
            break
    }
    if let sequeId = segueId {
        self.performSegueWithIdentifier(segueId!, sender: self)
    }
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "showCard" {
        let indexPaths = collectionView!.indexPathsForSelectedItems()
        let indexPath = indexPaths![0] as NSIndexPath
        let vc = segue.destinationViewController as! CardDetailViewController
        let selectedCard = self.cards[indexPath.item]
        vc.cardTitle = selectedCard.headline
        vc.cardImage = selectedCard.image
        vc.files = selectedCard.files
        vc.cardBody = selectedCard.text
        // set imageview dimensions
        let screenSize: CGRect = UIScreen.mainScreen().bounds
        let screenWidth = screenSize.width
        let boundingRect = CGRect(x: 0, y: 0, width: screenWidth, height: CGFloat(MAXFLOAT))
        if selectedCard.image != nil {
            let rect = AVMakeRectWithAspectRatioInsideRect(selectedCard.image!.size, boundingRect)
            vc.heightOfImage = rect.height
        } else {
            vc.heightOfImage = 0
        }
    }
    if segue.identifier == "showQuestion" {
        let indexPaths = collectionView!.indexPathsForSelectedItems()
        let indexPath = indexPaths![0] as NSIndexPath
        let vc = segue.destinationViewController as! QuestionAnswerViewController
        let selectedCard = self.cards[indexPath.item]
        vc.questionText = selectedCard.headline
        vc.smartEvent = selectedCard.event
        vc.smartLocation = selectedCard.smartLocation
        vc.cardId = selectedCard.cardID
    }
}

提前感谢您的帮助。

我想明白了。我在选项卡栏控制器中覆盖了viewDidAppear,而没有调用super.viewDidAppress()。

最新更新