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

时间:2013-09-19 08:52:11

标签: ios objective-c uiviewcontroller uikit ios7

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

UIViewController嵌入在UINavigationController中。 我通过改变色调颜色,条纹色调和标题文本属性来配置NavigationBar,但是当我尝试更改半透明时,我遇到了问题。我通过删除所有其他自定义代码来挑出问题。 每当我在UIViewController的-viewDidLoad中执行此操作时:

  

self.navigationController.navigationBar.translucent = NO;

容器视图在其自身顶部添加了一些空间,就好像它有自己的导航栏一样。每当我将半透明设置为YES时,视图都会正确显示所有内容。只要我将半透明设置为NO,就会在包含的视图中发生这种情况。

这里有什么东西我不在吗?

我尝试在所包含的视图上将半透明度设置为YES,并将其设置为隐藏,但没有任何效果。 不知何故,包含的视图从父容器继承属性? 每当我将半透明度设置为NO时,如何避免在包含的视图上创建这个额外空间?

我希望设置半透明度只会影响半透明度,但不会影响视图的位置。

半透明时=是

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

半透明=否

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

P.S。我的观点比这更复杂,我只是在努力。

8 个答案:

答案 0 :(得分:34)

这里缺少的是半透明导航栏位于视图控制器视图的顶部,而非半透明导航栏则按下视图控制器的视图(有效地调整视图大小)。

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

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

答案 1 :(得分:19)

我通过在-viewDidLoad中添加以下代码来修复此问题:

self.extendedLayoutIncludesOpaqueBars = YES;

答案 2 :(得分:16)

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

(这并不完全适用于这个问题,但是当我搜索这个问题时,基本上只会弹出这个问题,也许这些信息会帮助其他人解决同样的问题。)


细节:

要访问情节提要编辑器中的导航栏:显示文档大纲(菜单编辑器 - >显示文档大纲),选择导航栏。

Navigation Bar in Document Outline

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

Translucent Propterty

如果这没有用,请在TextEdit中打开storyboard文件,查找navigationBar元素并检查opaquetranslucent属性。你想要translucent="NO"

StoryBoard Source

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

编辑: (我不知道,它是否一直存在,但是可以在项目导航器中右键单击storyboard文件并选择“Open As” - >“Source Code”。无需转到Finder。 )

答案 3 :(得分:3)

我通过进入IB>修复了这个问题。选择视图>取消选择"调整滚动条插图"

答案 4 :(得分:1)

从iOS 7.0开始,所有视图都会自动显示在导航栏,工具栏和标签栏后面,以提供Apple所称的" context" - 了解用户界面下方的内容(尽管模糊了玻璃效果),让用户了解屏幕上还有什么东西。

如果这样做妨碍了(老实说它确实经常出现问题)你可以通过修改edgeForExtendedLayout属性轻松地为给定的视图控制器禁用它。

例如,如果您不希望视图控制器进入任何栏后面,请使用:

edgesForExtendedLayout = []

可从iOS 7.0获取

Source

答案 5 :(得分:1)

以上答案中的上述内容对我没有用。当半透明时,我的 ViewController 向下推入导航控制器。适用于我的解决方案如下所示

  1. 转到属性检查器
  2. 勾选标题为在不透明栏下
  3. 的复选框,选择“扩展边缘”

    屏幕截图是

    enter image description here

    我正在使用Xcode 9。

    由于

答案 6 :(得分:0)

这纯粹是因为你的自动布局问题,可能是你在启动时隐藏了一些视图,只显示所有视图并检查空间是否仍然存在

答案 7 :(得分:-3)

设置tableView.opaque = false为我工作