故事板 – iOS8 UIToolbar在显示详细视图控制器时消失

前端之家收集整理的这篇文章主要介绍了故事板 – iOS8 UIToolbar在显示详细视图控制器时消失前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用UISplitViewController作为窗口的根目录使用应用程序.我希望master和detail视图控制器都是UINavigationController内的UITableViewController,UIToolbar可见.在水平常规尺寸宽度,这工作正常,如下所示:

问题在于水平紧凑的大小类,其中UISplitViewController将详细视图控制器推送到堆栈(如UINavigationController),工具栏在显示细节时消失,并在细节完全弹出后重新出现(见下文).我想让工具栏保持原样,就像使用普通的导航控制器一样.

示例项目已上传here.

解决方法

对于这个初始实现,我认为Apple选择隐藏主工具栏,因为(主)导航控制器不能使用单个工具栏同时在屏幕上,并在屏幕上滑动(不同的项目).如果您查看Apple的Mail应用程序,它们的主工具栏会在推送动画期间消失,就像您所看到的那样.

有趣的是,他们的日历应用程序在白天和事件视图控制器转换之间使用了非常好的工具栏crossFade.如果您查看该动画,您可以看到它是两个视图的单个工具栏,而不是在第一个动画上方设置动画的第二个工具栏.

尽管UINavigationController私有支持crossFade,但Apple不会为此特定视图控制器动画启用它. _shouldCrossFadeBottomBars返回NO,并且没有delegateShouldCrossFadeBottomBars导航控制器标志的setter.

我将提交一个错误报告以及一个增强请求,以支持统一故事板UISplitViewController的底栏动画.我相信Apple将改进iPhone的分割视图控制器功能.

在此期间,您可以通过隐藏主导航控制器的工具栏并将工具栏添加到主视图控制器的故事板来处理此问题.这将允许主视图控制器自己的工具栏在屏幕上,而详细视图控制器的工具栏项目将滑入.

这将涉及将master的UITableViewController更改为UIViewController.添加UIToolbar和约束.对于表,您可以放入UITableView,或使用容器视图并将其连接到UITableviewController.

在DetailViewController中设置详细视图的工具栏.

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view,typically from a nib.

    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] init ...];
    self.toolbarItems = @[barButtonItem];

    [self configureView];
}

导航控制器将在视图出现之前设置工具栏项(在视图加载之后),并且工具栏将与详细视图一起推到屏幕上.

如果你很好奇,这就是我理解的水平紧凑尺寸类的细节视图工具栏.它是辅助导航控制器,而不是详细视图控制器,它被推送到主导航控制器堆栈.主导航控制器从辅助导航控制器中获取其装饰,以及属于其可见(细节)视图控制器的navigationItems(和toolbarItems).

不幸的是,幕后崩溃拆分视图的辅助(导航)控制器的技巧会影响您的工具栏,因为主导航控制器接管了辅助导航控制器正在处理的内容.

我们所做的就是将辅助工具栏从辅助导航控制器移动到细节视图控制器,这样主导航控制器可以在推动辅助导航控制器时处理细节视图控制器的工具栏动画.

也许在未来的更新中,拆分视图控制器将能够为故事板的工具栏设置动画,但就目前而言,我知道如何操作的唯一方法是在代码中.

猜你在找的iOS相关文章