我正在使用一个应用程序使用 UISplitViewController
作为窗口的根。我希望主视图 Controller 和详细 View Controller 都是 UITableViewController
UINavigationController
的内部, 与 UIToolbar
可见的。在水平常规尺寸宽度中,这可以正常工作,如下所示:
问题在于水平紧凑的大小类,其中 UISplitViewController
将详细 View Controller 插入堆栈,如 UINavigationController
,工具栏在显示细节时消失,并在细节完全弹出后重新出现(见下文)。我希望工具栏与普通导航 Controller 一样保持原位。
示例项目上传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 的工具栏项目滑入。
这将涉及更改您的主人的UITableViewController
到 UIViewController
.添加 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/