ios - 布局/方向更改后的 Cordova iPhone X 安全区域。
问题描述
我safe-area-inset-top
在我的 Cordova 应用程序中使用 CSS 变量来处理 iPhone X 安全区域:
body {
padding-top: env(safe-area-inset-top);
}
应用程序启动时按预期工作。但是,当我通过自定义插件进入和退出全屏(强制横向)AVPlayer 并返回纵向应用程序时,填充消失了,我的应用程序被部分切断。
我目前在 iOS 插件中的 AVPlayerViewController 类中使用它。
风景视频.m
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeRight; // or LandscapeLeft
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
提前感谢您的任何帮助/想法!
解决方案
修复 iPhone X/XS 屏幕旋转问题
在 iPhone X/XS 上,屏幕旋转会导致标题栏高度使用不正确的值,因为计算 safe-area-inset-* 没有及时反映 UI 刷新的新值。即使在最新的 iOS 12 中,UIWebView 中也存在此错误。解决方法是插入 1px 上边距,然后快速反转它,这将触发 safe-area-inset-* 立即重新计算。一个有点丑陋的修复,但如果您出于某种原因必须使用 UIWebView,它会起作用。
window.addEventListener("orientationchange", function() {
var originalMarginTop = document.body.style.marginTop;
document.body.style.marginTop = "1px";
setTimeout(function () {
document.body.style.marginTop = originalMarginTop;
}, 100);
}, false);
代码的目的是使 document.body.style.marginTop 发生轻微变化,然后将其反转。它不一定必须是“1px”。您可以选择一个不会导致 UI 闪烁但能达到目的的值。
推荐阅读
- java - chromedriver 尝试获取特定元素的屏幕截图时出错
- javascript - 如何在不注销 Javascript 和 firebase 用户的情况下更改页面
- c# - 如何在 Unity 中锁定我的相机 Z 轴旋转?
- android - 回收站视图或任何视图下方的 BottomSheet peekHeight
- jquery - vue js中如何包含jquery库以及如何调用?
- c# - 从 UWP 应用异步拖放(和拖放)
- php - mysql查询结果到可点击的url
- c# - 使用 LINQ 循环通过 Dictionary、foreach 或 for-loop 哪个更有效?
- go - 读取 tcp 127.0.0.1:51719->127.0.0.1:6379:读取:连接由对等方重置
- sql-server - MSSQL 2005 我如何对这些数据进行分组