Ios 容器视图被向下推,好像它有一个UINavigationBar?

Ios 容器视图被向下推,好像它有一个UINavigationBar?,ios,objective-c,uiviewcontroller,uikit,ios7,Ios,Objective C,Uiviewcontroller,Uikit,Ios7,我有一个带有容器视图的UIViewController。此容器视图包含UITableViewController UIViewController嵌入在UINavigationController中。 我通过更改着色颜色、栏着色颜色和标题文本属性来配置NavigationBar,但是当我尝试更改半透明性时,我遇到了一个问题。通过删除所有其他自定义代码,我挑出了这个问题。 每当我在UIViewController的-viewDidLoad中执行此操作时: self.extendedLayoutIn

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

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

self.extendedLayoutIncludesOpaqueBars = YES;
self.navigationController.navigationBar.translucent=否

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

这里有我遗漏的东西吗

我尝试在包含的视图中将半透明设置为
YES
,并将其设置为hidden,但没有任何效果。 所包含的视图是否从父容器继承属性? 当我将半透明设置为
NO
时,如何避免在包含的视图上创建额外的空间

我希望设置半透明性只会影响半透明性,而不会影响视图的位置

半透明时=是

+---------------------------------+
|                                 |
|     UINavigationBar             |
|                                 |
+---------------------------------+
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|    UITableViewController        |
|    in a Contained View          |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
+---------------------------------+
半透明时=否

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

另外,我的视图比这更复杂,我很简单。

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

所以这里发生的是,有了一个半透明的导航条,空白实际上隐藏在导航条下面,而当导航条不是半透明的时候,它被“向下推”


有很多方法可以解决这个问题,这主要取决于您是否使用自动布局。

如果故事板出现此问题(不涉及代码中的半透明属性),我发现检查导航栏设置和(如果需要)故事板源文件很有帮助

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


详情如下:

要访问序列图像板编辑器中的导航栏:显示文档大纲(菜单编辑器->显示文档大纲),请选择导航栏

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

如果这没有帮助,请在TextEdit中打开情节提要文件,查找
导航栏
元素并检查
不透明
半透明
属性。您需要
半透明=“否”

(要打开序列图像板源代码:在项目导航器的Xcode中,右键单击序列图像板文件。选择“在Finder中显示”,然后在Finder窗口中,右键单击文件并选择“使用…打开”,然后选择TextEdit。)

编辑:
(我不知道它是否一直在那里,但你可以在项目导航器中右键单击情节提要文件并选择“打开为”->“源代码”。无需转到查找器。)

设置tableView.opaque=false对我有效

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

我通过在
-viewDidLoad
中添加这行代码解决了这个问题:

self.extendedLayoutIncludesOpaqueBars = YES;

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

从iOS 7.0开始,所有视图都自动位于导航栏、工具栏和选项卡栏后面,以提供Apple所称的“上下文”“–对用户界面下的内容有了一些了解(尽管由于磨砂玻璃效果而变得模糊),用户就可以了解屏幕外的其他内容

如果这妨碍了您的工作(老实说,它确实经常妨碍您),您可以通过修改其edgesForExtendedLayout属性,轻松地为给定的视图控制器禁用它

例如,如果不希望视图控制器进入任何栏后,请使用以下命令:

edgesForExtendedLayout=[]

可从iOS 7.0获得


上述答案中的上述内容对我不起作用。当半透明为否时我的视图控制器向下推,它嵌入到导航控制器中。对我有效的解决方案如下所示

  • 转到属性检查器
  • 勾选不透明条下标题为的复选框,选择“延伸边缘”
  • 屏幕截图不匹配

    我使用的是Xcode 9


    谢谢

    是否在滚动视图中向下推视图?如果是,则设置
    self.automaticallyAdjustsScrollViewInsets=NO在主视图控制器上。事实上,是的,这是一个TVC,所以你需要它。@Fogmeister为我工作…谢谢@福格迈斯特也为我工作。谢谢。@Fogmeister Thx一帮家伙!救了我day@Fogmeister你2013年的评论让我在2017年得以留在这里!!我使用自动布局。我应该怎么做呢?这取决于您的详细实现,但我认为最简单的方法是对容器视图仅使用以下约束:前导空间到超级视图、底部空间到超级视图和高度。通过这种方式,您可以将视图锚定到左下角,而不是(默认)左上角。非自动布局的情况如何?@Fogmeister对解决方法问题的评论是
    self.navigationController.automaticallyAdjustsScrollViewInsets=false
    。原因是navigationcontroller向滚动视图添加了额外的内容插入,使tableview在tran下可见