我正在构建一个由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()。