为标签栏控制器和 iPhone X 实现安全区域

Posted

技术标签:

【中文标题】为标签栏控制器和 iPhone X 实现安全区域【英文标题】:Implementing Safe Areas for Tab Bar Controller and iPhone X 【发布时间】:2018-05-10 22:43:10 【问题描述】:

我正在尝试做的事情:将标签栏放在 iPhone X 显示屏底部它所属的位置,并将导航栏放在显示屏顶部。

我一直在尝试完成我认为很简单的任务,即使用情节提要中的安全区域将标签栏放置在 iPhone X 显示屏底部附近。我缺少一些基本的东西。

我已经阅读了很多关于如何做到这一点的文章,including this one。它包括一个选项卡栏控制场景的屏幕截图,如下所示:

但正如文章所述,我无法在我的标签栏控制器中创建一个视图来放入我的标签栏项目。我的理解是,我将使用应该包含标签栏项目的视图的安全区域。但它不会让我在控制器视图之外的任何地方放置视图。我尝试过使用“嵌入” - 但所有选项都是灰色的。

导航控制器将导航栏移动到显示屏顶部也是如此。

有趣的是,IB 将它呈现在正确的位置,但在我的设备上,标签栏在它应该在的位置上方(导航栏在下方)。

我在场景的“界面生成器文档”中将“打开方式”设置为“最新 Xcode (9.0) 和 ios 11.1 构建”,并选中了“使用安全区域布局指南”。我没有使用任何自定义我的标签栏控制器或标签栏的类。我使用的是 XCode 9.3 和 iOS 11.3.1

我缺少什么简单的东西?提前致谢。

【问题讨论】:

如果您能详细说明您想要实现的目标,那就太好了。 抱歉 - 我认为这是隐含的 - 我需要将标签栏放在 iPhone X 显示屏底部的适当位置(将编辑帖子)。 那么您将无法点击标签栏按钮。 iPhone X 的右下方显示白条所在的位置。那是标签栏名义上出现的地方,而不是这个屏幕截图显示它们的地方。 【参考方案1】:

本文介绍了在您使用自定义导航栏或自定义标签栏时如何调整您的应用。

如果您使用的是标准导航栏或标签栏,那么您必须确保它的顶部或底部(取决于元素)约束连接到 superviewnot 安全区域布局指南。 UIKit 确保这些元素在 iPhone X 设备的顶部或底部以间距正确呈现。请查看this screenshot 进行澄清。

【讨论】:

谢谢 - 问题是 - 我什至无法设置约束或将任何内容与标签栏对齐;一切都是灰色的。 (我没有使用自定义标签栏)。我假设这是因为没有对齐它?我不能把 UIView 放在那里,然后把 Tab Bar 放在里面。除了标签栏控制器,我无法控制-拖动标签栏到任何地方,这只是给了我一个添加委托出口的选项。即使我想,我什至不能将标签栏放在视图中,甚至无法获得一个可以附加的安全区域。否则,标签栏在应用程序中正常运行 @yodel 似乎您使用的是标准的 Tab Bar Controller 在这种情况下,一切都是灰色的,这是正常的。无法在此处添加视图、约束或其他任何内容。只能在常规视图控制器中添加标签栏。希望这会对您有所帮助。 奇怪的是我在标签栏控制器中有一个标签栏(标签栏控制器是我的初始视图控制器) - 它工作正常 - 但我不能对任何东西施加任何限制我提到了,没有安全区域。我已经用另外两个屏幕截图更新了原始帖子 - 一个故事板和一个我所指的视图控制器堆栈。我应该如何构建这个?我似乎无法将标签栏控制器嵌入到任何东西中。 所以我不得不把这个项目放在抽屉里一段时间,但把它拿出来做了一些测试,事情变得越来越奇怪。选项卡视图控制器现在可以在 iPhone X 机型上正常工作——我用一个新项目对其进行了测试。它将标签放在它们应该位于底部的位置。但我的项目仍然让他们处于这个错位的位置。我创建了一个带有新选项卡视图控制器的新故事板,转到一个空白视图控制器。我还创建了一个新的“空白”应用程序委托,以确保它不是在那里做的。而项目仍然将其放置在错误的位置 所以,在过去 4 年里我一直在编辑这个项目,我唯一能想到的就是罪魁祸首在项目设置的某个地方。构建设置中是否有我应该检查的地方?找不到任何东西,因为我已经梳理了它们。有什么想法吗?

以上是关于为标签栏控制器和 iPhone X 实现安全区域的主要内容,如果未能解决你的问题,请参考以下文章

隐藏在标签栏控制器标签栏旁边的 iPhone 视图

iPhone X 设计适配指南 & iOS 11 新特性

iPhone X 的“安全区域”(以像素为单位)是啥?

如何设置状态栏或安全区域以删除 iPhone X 上的空白?

在标签栏控制器中嵌入导航控制器会更改视图控制器的安全区域

iPhone X 上的导航栏不覆盖状态栏