在导航控制器上按下EKEventViewController并返回后出现白色底栏

时间:2015-05-23 08:36:36

标签: ios ios8 uinavigationcontroller ekevent

我正在开发一个应用程序,显示从iOS日历中提取的事件表。单击表中的行时,我想使用EKEventViewController显示事件信息。以下是事件表的样子: EventList before push 单击此列表中的事件时,我使用以下代码推送EKEventViewController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    EKEventViewController *eventViewController = [EKEventViewController new];
    eventViewController.event = [self.events objectAtIndex:[indexPath row]];
    [self.navigationController pushViewController:eventViewController animated:YES];
    [self.navigationController setNavigationBarHidden:NO];
    [tableView reloadData];
}

我进入了活动信息屏幕(正是我想要的): Event overview

但是当我现在点击左上角的后退按钮时,我遇到了这个屏幕: Event list after push

注意底部的白条。为了摆脱这个酒吧我现在必须杀死应用程序,回到主菜单,应用程序的其他部分没有任何效果(每个屏幕只是"缩小"以适应现在更小的空间,可能是因为使用了自动布局)。

iOS 7上不会出现这种情况,只有在iOS 8(8.2测试版)上才会出现此白条。什么是这个酒吧以及如何摆脱它?

编辑:我注意到"白色"当屏幕截图在StackOverflow上发布时,栏看起来是灰色的,而设备上肯定是白色的。

EDIT2:底部按钮的约束图片: layout

3 个答案:

答案 0 :(得分:0)

我从来没有发现白条实际上是什么,但我最终以模态方式呈现了EKEventViewController,效果非常好:How to get a “Done” or “Back” button in an EKEventViewController when no having a navigation bar?

答案 1 :(得分:0)

解决这个问题的另一种方法是通过故事板。 在故事板上创建一个ViewController对象 使其类EKEventViewController(不需要代码或类文件) 嵌入导航控制器。 从您希望将EKEventViewController调用到NavigationController

的视图控制器创建详细信息segue

然后使用performSegueWithIdentifier(“EKEventViewController”,发件人:发件人)

设置这样的prepareForSegue ....

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "EKEventViewController" {
        let controller = (segue.destination as! UINavigationController).topViewController as! EKEventViewController
        controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
        controller.navigationItem.leftItemsSupplementBackButton = true
        controller.event          = event
        controller.allowsEditing  = true
        self.splitViewController?.toggleMasterView()
    }
}

答案 2 :(得分:0)

我终于弄清楚在这种情况下发生了什么。我通常不使用UIToolbar,这就是为什么我没有尽快认识到这一点,但是UINavigationController有一个可选工具栏并且有一个函数setToolbarHidden()

来自Displaying a Toolbar

部分
  

导航控制器对象管理其视图层次结构中的可选工具栏。显示时,此工具栏从活动视图控制器的toolbarItems属性获取其当前项集。 [...]如果并非所有视图控制器都支持工具栏项,则委托对象可以调用此方法以在后续推送和弹出操作期间切换工具栏的可见性。

因此,在推送viewWillAppear()的视图控制器的EKEventViewController中,请调用:

self.navigationController?.setToolbarHidden(true, animated: false)

并将EKEventViewController推入堆栈调用时:

self.navigationController?.setToolbarHidden(false, animated: true)

您可以根据自己的喜好调整animated参数。