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

时间:2015-11-18 00:59:44

标签: ios uinavigationcontroller storyboard

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

这是它的样子:

enter image description here

从图中可以看出,灰色条不是覆盖YTPlayerView,而是将其推倒。

这里发生了什么?

修改

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

enter image description here

修改

我添加了相关YTPlayerView的约束。

enter image description here

修改

顶部布局指南的约束为0

enter image description here

5 个答案:

答案 0 :(得分:2)

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

enter image description here

这是有缺陷的等级制度;我改变了stackView的颜色,看它是否是罪魁祸首,但事实并非如此。

我做了一些测试,发现问题包含在YTPlayerView

enter image description here

YTPlayerView开始包括灰色空间,但在使用iOS 9"返回App"后,在Safari中使用Youtube.com。功能灰色条将视图推入自身。

最终修复此问题的仅仅是在层次结构中设置YTPlayerView,如下所示:

enter image description here

使用"返回App"后,灰色条不出现功能了。

答案 1 :(得分:0)

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

修改

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

编辑2

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

目标C

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

<强>夫特

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

为了确认,YTPlayerView的超级视图是灰色的吗?

答案 2 :(得分:0)

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
}

答案 3 :(得分:0)

原因是UIWebBrowserView不能填充UIWebViewScrollView的整个YTPlayerView

如果您尝试打开视图调试器,则会看到以下内容:

enter image description here

从视图调试器中我们可以看到UIWebBrowserView并没有填充整个UIScrollView,因为默认情况下,用于确定调整后的内容偏移量的行为设置为automatic。 :

var contentInsetAdjustmentBehavior: UIScrollView.ContentInsetAdjustmentBehavior { get set }

  

此属性指定如何使用安全区域插图来修改滚动视图的content>区域。此属性的默认值为> UIScrollView.ContentInsetAdjustmentBehavior.automatic。

要解决此问题,只需将ContentInsetAdjustmentBehavior设置为.never,这将告诉播放器webView的UIScrollView请勿调整滚动视图插图。

    if #available(iOS 11.0, *) {
       *yourPlayerView*.webView?.scrollView.contentInsetAdjustmentBehavior = .never
    } else {
        // Fallback on earlier versions
    }

答案 4 :(得分:-1)

您的视频观看标记了屏幕大小的限制以及视频输入所需的16:9比例。我可以确认这会在视频Feed上方创建灰色条。您可以尝试没有宽高比(在这种情况下屏幕尺寸将自行设置)。