导航后导航栏损坏

时间:2016-06-07 20:30:07

标签: ios swift uinavigationcontroller uipageviewcontroller

这是目前的情况:

UITabBarController
    UINavigationController
        UIPageViewController
            Some UIViewControllers (the actual content)

所以UIPageViewController包含一些UIViewControllers,它们都包含一个UITableView。

This is what the Apps looks like

当我单击UITableView中的一行时,UIViewController会调用didSelect方法。该方法如下所示:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    let activity = self.activities[indexPath.row - 1]
    self.delegate?.dayTableViewSelectedActivity(activity, sender: self)
}

然后UIPageViewController实现了协议,因此调用了委托方法。该方法如下所示:

func dayTableViewSelectedActivity(activity: Activity, sender: DayTableViewController) {
    self.performSegueWithIdentifier("openDetails", sender: activity)
}
然后,应用程序导航(推送)到DetailViewController。当我向后滑动(默认iOS行为)时,DetailViewController立即弹出到UIPageViewController,没有动画。然后我的导航栏坏了,并且包含一个不属于那里的后退按钮,因为我不能再回头了。

Broken navigation bar

当我再次单击一个单元格时,控制台会给我一条nested push animation can result in corrupted navigation bar消息。我从那里采取的每一个动作都给了我更多的控制台错误,如:

nested pop animation can result in corrupted navigation bar
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

这个错误让我感到沮丧几个小时,我无法弄清楚我做错了什么。没有双重段。我多次检查过它。我希望你们能帮助我。

2 个答案:

答案 0 :(得分:2)

经过几个小时的挣扎后,我在这里找到了答案:Pop animation is not working in first UINavigationController of UITabbarController

我确实有一个UITTabBarController的子类,它覆盖了viewDidAppear方法。我添加了super.viewDidAppear,现在一切正常。

答案 1 :(得分:1)

您将要确保在导航回PageViewController时使用Unwind Segue。这会将TableViewController弹出堆栈顶部并返回到PageViewController。这是一篇关于如何在Swift中使用它的好文章“

https://www.andrewcbancroft.com/2015/12/18/working-with-unwind-segues-programmatically-in-swift/