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