容器视图被推下来,就像它有一个UINavigationBar?

我有一个容器视图的UIViewController。 这个容器视图包含一个UITableViewController。

UIViewControllerembedded在UINavigationController中。 我通过更改色调颜色,条形色彩和标题文本属性来configurationNavigationBar,但是当我尝试更改半透明性时,我遇到了问题。 我已经通过删除所有其他自定义代码来单独解决问题。 每当我在UIViewController的-viewDidLoad这样做:

self.navigationController.navigationBar.translucent = NO;

容器视图在其本身上增加了一些空间,就好像它有自己的导航栏一样。 每当我将半透明设置为YES,视图将正确显示所有内容。 这只发生在一个包含的视图,每当我设置半透明的NO。

有什么我在这里失踪?

我试图将半透明设置为YES ,并将其设置为隐藏,但没有任何工作。 是不知何故,包含的视图inheritance父容器的属性? 当我将半透明设置为NO时,如何避免在包含视图上创build的额外空间?

我认为设置半透明只会影响半透明性,而不是影响观点的位置。

半透明= YES时

 +---------------------------------+ | | | UINavigationBar | | | +---------------------------------+ | | | | | | | | | | | UITableViewController | | in a Contained View | | | | | | | | | | | | | +---------------------------------+ 

当半透明= NO

 +---------------------------------+ | | | UINavigationBar | | | +---------------------------------+ | | |blank space created on top of view | | +---------------------------------+ | | | | | | | | | | | | | UITableViewController | | in a Contained View | | | +---------------------------------+ 

PS我的观点比这更复杂,我简单。

这里缺less的是半透明的导航栏位于视图控制器的视图之上,而非半透明的导航栏将视图控制器视图(有效地resize)放下。

所以这里发生的事情是,用一个半透明的导航栏,这个白色空间实际上隐藏在酒吧下面,而当酒吧不是半透明时,它被“推倒”。

有很多方法可以去做,主要取决于你是否使用自动布局。

如果故事板出现此问题(不需触摸代码中的半透明属性),我发现检查NavigationBar设置以及 – 如果需要,故事板源文件是有帮助的。

(这个问题并不完全适用于这个问题,但是当我search这个问题的时候,基本上只有这个问题出现了,也许这个信息可以帮助其他人解决同样的问题。)


细节:

要访问故事板编辑器中的导航栏:显示文档大纲(菜单编辑器 – >显示文档大纲),请select导航栏。

文档大纲中的导航栏

然后在“属性”检查器右侧的“实用程序”窗格中,确保“半透明”未选中。

半透明Propterty

如果这不起作用,请在TextEdit中打开故事板文件,查找navigationBar元素并检查opaquetranslucent属性。 你想要translucent="NO"

StoryBoard来源

(打开故事板源代码:在项目导航器的Xcode中,右键单击故事板文件,select“在Finder中显示”,在Finder窗口中,右键单击文件,select“打开方式…”并select文本编辑。

编辑:(我不知道,是否一直在那里,但是可以在项目导航器中右键点击故事板文件并select“Open As” – >“Source Code”。不需要去Finder 。)

我通过在viewDidLoad中添加此代码行的方法解决了这个问题

  1. self.extendedLayoutIncludesOpaqueBars = YES;

截图

我通过进入IB来解决这个问题>select视图>取消select“调整滚动条插入”

这纯粹是因为你的汽车布局问题,可能是你在开始时隐藏了一些意见,只是显示所有的意见,并检查空间是否仍然存在

从iOS 7.0开始,所有的视图都会自动隐藏在导航栏,工具栏和标签栏后面,以提供Apple称之为“上下文”的内容 – 了解UI下面的内容(尽pipe模糊的磨砂玻璃效果)可以让用户了解其他只是在屏幕外。

如果这种方式正在逐步实现(老实说,它确实经常令人惊讶),您可以通过修改边缘的BorderForExtendedLayout属性,轻松地禁用它给定的视图控制器。

例如,如果你不想要一个视图控制器后面的任何酒吧,使用这个:

edgesForExtendedLayout = []

从iOS 7.0可用

资源

设置tableView.opaque = false为我工作