storyboard - 显示详细 View Controller 时iOS8 UIToolbar消失

标签 storyboard ios8 uisplitviewcontroller uitoolbar

我正在使用一个应用程序使用 UISplitViewController作为窗口的根。我希望主视图 Controller 和详细 View Controller 都是 UITableViewController UINavigationController 的内部, 与 UIToolbar可见的。在水平常规尺寸宽度中,这可以正常工作,如下所示:

iPad 2

问题在于水平紧凑的大小类,其中 UISplitViewController将详细 View Controller 插入堆栈,如 UINavigationController ,工具栏在显示细节时消失,并在细节完全弹出后重新出现(见下文)。我希望工具栏与普通导航 Controller 一样保持原位。

enter image description here

示例项目上传here .

最佳答案

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

有趣的是,他们的日历应用程序在日和事件 View Controller 转换之间使用了一个非常好的工具栏 crossFade。如果您查看该动画,您会发现它是两个 View 的单个工具栏,而不是第一个工具栏上方的第二个工具栏动画。

尽管UINavigationController 私下支持crossFade , Apple 没有为这个特定的 View Controller 动画启用它。 _shouldCrossFadeBottomBars返回 NO,并且 delegateShouldCrossFadeBottomBars 没有 setter 导航 Controller 标志。

我会提交一个错误报告以及一个增强请求以支持统一 Storyboard的底栏动画UISplitViewController .我相信苹果会改进 iPhone 的 Split View Controller 功能。

同时,您可以通过隐藏主导航 Controller 的工具栏来处理此问题,并将工具栏添加到主视图 Controller 的 Storyboard 中。这将允许主视图 Controller 自己的工具栏显示在屏幕上,而详细 View Controller 的工具栏项目滑入。

这将涉及更改您的主人的UITableViewControllerUIViewController .添加 UIToolbar和约束。对于表格,您可以输入 UITableView ,或使用容器 View 并将其连接到您的 UITableviewController .

DetailViewController 中设置详细 View 的工具栏.

- (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];
}

导航 Controller 将在 View 出现之前设置工具栏项目(在 View 加载之后),并且工具栏将与详细 View 一起被推送到屏幕上。

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

不幸的是,折叠 Split View的辅助(导航) Controller 的幕后技巧会影响您的工具栏,因为主导航 Controller 接管了辅助导航 Controller 正在处理的内容。

我们所做的只是将辅助工具栏从辅助导航 Controller 移动到细节 View Controller ,因此主导航 Controller 可以在辅助导航 Controller 被推送时处理细节 View Controller 的工具栏动画。

也许在 future 的更新中, Split View Controller 将能够为 Storyboard的工具栏设置动画,但目前,我知道如何做到这一点的唯一方法是在代码中。

关于storyboard - 显示详细 View Controller 时iOS8 UIToolbar消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26346570/

相关文章:

ios - 如何在导航栏的标题中包含图像?

ios - 查看 iOS 8 上已安装的扩展

ios - iOS 8 中的相机显示黑屏

swift - 如何覆盖初始 UIViewController 的特征集合? (带 Storyboard)

objective-c - CoreData 编辑/覆盖对象

ios - 如何使 Storyboard中的 UILabel 和 UIButton 大写

ios - 如何正确处理切换 View Controller /场景?

ios - Collection View 标题在运行时不可见

ios - Swift 如何从 CollectionviewCell 中提取 indexPath 值?

ios - UISplitViewController:如何从 Detail 返回到 Master