在Swift之后出现在导航栏下方的灰色条

当我继续到特定的VC时,我的导航栏下方会出现一个与我的导航栏+状态栏大小完全相同的灰色条。 在另一个VC中,灰色条不在那里,除非我打开Youtube,然后使用iOS 9“回到”App“button。

这是它的样子:

在这里输入图像说明

正如你从图片中可以看到的那样,灰色条并没有覆盖YTPlayerView,而是将其推倒。

这里发生了什么?

编辑

为了清晰,我添加了视图层次结构。

在这里输入图像说明

编辑

我添加了有关YTPlayerView的约束。

在这里输入图像说明

编辑

约束顶部布局指南是0

在这里输入图像说明

我不完全理解这个问题,但似乎是一个视图层次问题?

在这里输入图像说明

这是有缺陷的层次结构; 我改变了stackView的颜色,看它是不是罪魁祸首,但事实并非如此。

我做了更多的testing,发现问题包含在YTPlayerView

在这里输入图像说明

YTPlayerView开始包括灰色空间,但在Safari中使用iOS 9“回到应用程序”function前往Youtube.com后,灰色条将视图向下推进。

最终解决这个问题的只是在层次结构中设置较低的YTPlayerView ,如下所示:

在这里输入图像说明

使用“返回到应用程序”function后,灰色条不再出现。

我曾经有过类似的问题。 这与使用segues无关。 这个问题很可能是你正在使用的约束。 设置YTPlayerView相对于顶部布局指南的顶部约束,而不是超级顶视图(您可能已经完成)。 除非我知道你提供的限制,否则我不能特别说明这个问题的解决办法。 提供超级视图顶部的约束会导致这种问题,当你是“呈现”一个视图控制器和“消除”它,这是类似于你正在做的IOS 9回到应用程序选项的行动。 只要试着用我提到的约束,如果它不能解决问题,请尝试给出一些关于你正在使用的约束的细节。

编辑

更具体地说,现在你必须将YTPlayerView的顶部约束设置为一个固定的距离(这等于导航条加上状态栏的高度,我假设为64px )到superview的顶部,这是ViewController的视图 。 这需要改变,顶部的约束需要设置为顶部布局指南 0px 。 这应该可以解决你的问题。

编辑2

由于您仍然遇到问题,请尝试将顶部约束的IBOutlet连接到ViewController,然后在视图控制器的viewDidAppear方法中将其设置为零。

目标C

 topConstraint.constant = 0; [self.view layoutSubviews]; 

Swift

 topConstraint.constant = 0 self.view.layoutSubviews() 

只是为了确认, YTPlayerView是灰色的吧?

Swift 3中的另一种方法:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Navigation bar will be black throughout the app UINavigationBar.appearance().barStyle = .blackOpaque return true } 

您的video视图的屏幕大小和videoinput的16:9比例都受到约束。 我可以确认这会在videoFeed上面创build灰色栏。 您可以尝试没有宽高比(在这种情况下,屏幕尺寸将自行设置)。