拆分视图控制器导航栏的奇怪行为

Posted

技术标签:

【中文标题】拆分视图控制器导航栏的奇怪行为【英文标题】:Strange behavior of Navigation Bar of Split View Controller 【发布时间】:2012-11-09 14:57:12 【问题描述】:

我发现UINavigationBarUISplitViewController 的行为相当奇怪。我在下图中有一个标准rootViewController

当按下条形按钮时(暂时用于调试,样式为“添加按钮”),我添加一个新的导航栏(注意:我添加,我不替换!)处理屏幕上完成的事件。

说明 - 按下按钮,用户开始在屏幕上绘制内容,添加新栏用于交互以停止绘制模式。

问题 - 但是,当我添加此栏时,会出现一个奇怪的图形细节,其中我的 rootViewController 栏被分成两部分。下图(标红):

这是一个已知问题还是出于某种原因?

代码:

UINavigationBar *tmpBar = [[UINavigationBar alloc] initWithFrame:CGRectOffset(CGRectMake(0.0, 0.0, 1024.0, 44.0), 0, - 44.0)];
UINavigationItem *it = [[UINavigationItem alloc] initWithTitle:@"Draw, baby, draw!"];
it.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelDrawing)];
it.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(sendMail)];
tmpBar.items = [[NSArray alloc] initWithObjects:it, nil];

self.canvasBar = tmpBar;

[self.splitViewController.view addSubview:self.canvasBar];
[self.splitViewController.view bringSubviewToFront:self.canvasBar];

[UIView beginAnimations:@"animateBarOn" context:NULL];
[UIView setAnimationDuration:1.0];
[self.canvasBar setFrame:CGRectOffset([self.canvasBar frame], 0, 44)];
[UIView commitAnimations];

注意:我不是在寻找替代解决方案,而是解释为什么会发生这种情况。

【问题讨论】:

为什么不添加 UIToolBar 来代替 UINavigationBar? “工具栏 - 提供一种在屏幕底部显示工具栏的机制。” 我在顶部使用了 UIToolBar 很多次。当我展示 modelViewController + Apple 文档时的一个例子也是这么说的。 好的,这一切都很好,但我并不是在寻求替代解决方案。 你为什么不从 splitViewController 呈现全屏视图控制器(可能使用自定义动画)。更改拆分视图控制器的导航栏似乎很hacky。 【参考方案1】:

您的第二个导航栏比第一个略低,因此您在蓝色栏中看到了划分。至于为什么,我不能说没有更多关于你如何添加它的信息。

【讨论】:

我添加了代码,但我认为我没有把它放低。此外,当条形图下降时,整个动画中都可以看到“缝合”。

以上是关于拆分视图控制器导航栏的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:Slider 在导航栏项目的前导/尾随时的奇怪行为

多次推送和弹出动画 NO 后导航栏的奇怪行为。 IOS 7

奇怪的 UINavigationBar 行为?

为什么在首次启动时我的导航栏位于状态栏下

将带有可见导航栏的视图控制器弹出到带有隐藏导航栏的视图控制器时,带有 interactivePopGestureRecognizer 的黑色区域

模态 Segue 进入没有导航栏的导航控制器