当我转到特定的VC时,我的导航栏下面会出现一个与导航栏+状态栏大小相当的灰色条。在另一个VC中,灰色条不存在,除非我打开Youtube然后使用iOS 9“返回'App'”按钮。
这是它的样子:
从图中可以看出,灰色条不是覆盖YTPlayerView,而是将其推倒。
这里发生了什么?
编辑
为清晰起见,我添加了视图层次结构
编辑
我添加了有问题的YTPlayerView
的约束。
编辑
顶部布局指南的约束为0
我曾经遇到过类似的问题。它与使用segue无关。问题很可能与您使用的约束有关。设置YTPlayerView
相对于顶部布局指南的顶部约束,而不是superview顶部(您当前可能已经完成)。除非我知道你提供的限制,否则我不能特别说出这个问题的解决方案。当您“呈现”视图控制器并“解除”它时,提供与超级视图顶部相关的约束会导致此类问题,这与您使用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
的超级视图是灰色的吗?
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
}
造成这种情况的原因是UIWebBrowserView
没有填满UIWebViewScrollView
的整个YTPlayerView
如果您尝试打开视图调试器,您将看到以下内容:
从视图调试器中我们可以看到UIWebBrowserView
没有填充整个UIScrollView
,因为默认情况下确定调整内容偏移的行为设置为automatic
,文档说:
var contentInsetAdjustmentBehavior: UIScrollView.ContentInsetAdjustmentBehavior { get set }
此属性指定如何使用安全区域insets修改滚动视图的content>区域。此属性的默认值为> UIScrollView.ContentInsetAdjustmentBehavior.automatic。
要克服这种行为,只需将ContentInsetAdjustmentBehavior
设置为.never
,它将告诉播放器webView的UIScrollView
不要调整滚动视图插图。
if #available(iOS 11.0, *) {
*yourPlayerView*.webView?.scrollView.contentInsetAdjustmentBehavior = .never
} else {
// Fallback on earlier versions
}
您的视频视图会根据屏幕大小和视频Feed所需的16:9比例进行标记。我可以确认这会在视频Feed上方创建灰色条。您可以尝试没有宽高比(在这种情况下,屏幕尺寸将自行设置)。