我有一个带容器视图的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。我的观点比这更复杂,我只是在努力。
答案 0 :(得分:34)
这里缺少的是半透明导航栏位于视图控制器视图的顶部,而非半透明导航栏则按下视图控制器的视图(有效地调整视图大小)。
所以这里发生的事情是,半透明的导航栏,实际上隐藏在栏下方的白色空间,而当栏不是半透明时,它被“推下”。
有很多方法可以解决,主要取决于你是否使用自动布局。
答案 1 :(得分:19)
我通过在-viewDidLoad
中添加以下代码来修复此问题:
self.extendedLayoutIncludesOpaqueBars = YES;
答案 2 :(得分:16)
如果故事板出现此问题(不触及代码中的半透明属性),我发现检查NavigationBar设置以及 - 如有必要 - 故事板源文件很有帮助。
(这并不完全适用于这个问题,但是当我搜索这个问题时,基本上只会弹出这个问题,也许这些信息会帮助其他人解决同样的问题。)
细节:
要访问情节提要编辑器中的导航栏:显示文档大纲(菜单编辑器 - >显示文档大纲),选择导航栏。
然后在“属性”检查器右侧的“实用工具”窗格中,确保“半透明”未选中。
如果这没有用,请在TextEdit中打开storyboard文件,查找navigationBar
元素并检查opaque
或translucent
属性。你想要translucent="NO"
。
(要打开故事板源:在项目导航器的Xcode中右键单击故事板文件。选择“在Finder中显示”,在Finder窗口中,右键单击文件并选择“打开方式...”并选择文本编辑。)
编辑: (我不知道,它是否一直存在,但是可以在项目导航器中右键单击storyboard文件并选择“Open As” - >“Source Code”。无需转到Finder。 )
答案 3 :(得分:3)
我通过进入IB>修复了这个问题。选择视图>取消选择"调整滚动条插图"
答案 4 :(得分:1)
从iOS 7.0开始,所有视图都会自动显示在导航栏,工具栏和标签栏后面,以提供Apple所称的" context" - 了解用户界面下方的内容(尽管模糊了玻璃效果),让用户了解屏幕上还有什么东西。
如果这样做妨碍了(老实说它确实经常出现问题)你可以通过修改edgeForExtendedLayout属性轻松地为给定的视图控制器禁用它。
例如,如果您不希望视图控制器进入任何栏后面,请使用:
edgesForExtendedLayout = []
可从iOS 7.0获取
答案 5 :(得分:1)
以上答案中的上述内容对我没有用。当半透明否时,我的 ViewController 向下推入导航控制器。适用于我的解决方案如下所示
答案 6 :(得分:0)
这纯粹是因为你的自动布局问题,可能是你在启动时隐藏了一些视图,只显示所有视图并检查空间是否仍然存在
答案 7 :(得分:-3)
设置tableView.opaque = false
为我工作