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

Eri*_*ric 45 objective-c uiviewcontroller uikit ios ios7

我有一个带容器视图的UIViewController.此Container视图包含UITableViewController.

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

self.navigationController.navigationBar.translucent = NO;

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

这里有什么我想念的吗?

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

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

半透明= YES时

+---------------------------------+
|                                 |
|     UINavigationBar             |
|                                 |
+---------------------------------+
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|    UITableViewController        |
|    in a Contained View          |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

当半透明=否

+---------------------------------+
|                                 |
|     UINavigationBar             |
|                                 |
+---------------------------------+
|                                 |
|blank space created on top of view
|                                 |
+---------------------------------+
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|     UITableViewController       |
|     in a Contained View         |
|                                 |
+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

PS我的观点比这更复杂,我只是简单地说.

mic*_*tox 34

你在这里缺少的是一个半透明的导航栏位于你的viewcontroller视图的顶部,而一个非半透明的导航栏推动你的视图控制器的视图(有效地调整它的大小).

所以这里发生的事情是,使用半透明的导航栏,白色空间实际上隐藏在栏下面,而当栏不是半透明时,它被"推下".

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

  • 这取决于你的详细实现,但我想说最简单的方法是只对容器视图使用以下约束:前导空间到superview,底部空间到superview和height.这样,您将视图锚定到左下角而不是(默认)左上角 (6认同)

小智 20

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

self.extendedLayoutIncludesOpaqueBars = YES;
Run Code Online (Sandbox Code Playgroud)


Rai*_*rze 17

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

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


细节:

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

文档大纲中的导航栏

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

半透明的礼物

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

StoryBoard来源

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

编辑:(我不知道,它是否一直存在,但可以在项目导航器中右键单击storyboard文件并选择"打开为" - >"源代码".无需转到Finder .)