- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试以编程方式识别带有缺口的 iPhone。我知道 screen.size 方法,但是当你有一个支持所有界面方向的通用应用程序时,它会变得一团糟(计算所有可能的变化)。因此,我正在寻找一种更简单、更优雅的方法来检测较新的 iPhone X 型号。
我在网上偶然发现了一种应该可行的方法。在其中,您测量安全区域的底部插入,如果它不为零,则您拥有 iPhone X 型号。这在理论上是有道理的,因为安全区域在 iPhone X 手机上不会到达屏幕底部,但在所有其他设备上都会到达。我这样检查:
if (@available( iOS 11.0, * )) {
if ([[[UIApplication sharedApplication] keyWindow] safeAreaInsets].bottom > 0) {
// iPhone with notch
}
} else {
// Regular iPhone
}
但是,这不起作用。有人可以指出我在实现中的错误或确认此方法是否可行吗?
最佳答案
我不得不深入挖掘,但找到了答案(我想向用户6788419大声喊叫,他的正确答案深藏在另一个线程中)。
首先,上面的代码是正确的。检查安全区域的底部插入是否大于零将准确识别带有凹口的 iPhone(截至撰写本文时)。所以,这是正确的:
if (@available( iOS 11.0, * )) {
if ([[[UIApplication sharedApplication] keyWindow] safeAreaInsets].bottom > 0) {
// iPhone with notch
}
}
但是,将上述语句放在代码中的位置很重要,因为在第一个运行循环结束之前 UIWindow 不可用。这意味着,如果您在 viewDidLoad 中或在结束之前(例如在 init 中)检查凹口,底部插入将始终为零。
如果您与我类似,需要此检查来设置主视图,您可以将所有设置移至单独的函数(例如 postViewDidLoad)中,并在 viewDidLoad 结束后调用它:
[self performSelector:@selector(postViewDidLoad) withObject:nil afterDelay:0.0f];
或者,您也可以将其附上:
dispatch_async(dispatch_get_main_queue(), ^{
// Check notch here
});
更新:适用于 iOS 13 及更高版本的代码(做同样的事情)。当您调用该函数时,“areaPosition”是一个字符串参数。 “top”检查凹口,其他所有内容检查是否存在底部主页指示器。
- (UIWindow *) keyWindow {
UIWindow *foundWindow = nil;
NSArray *windows = [[UIApplication sharedApplication]windows];
for (UIWindow *window in windows) {
if (window.isKeyWindow) {
foundWindow = window;
break;
}
}
return foundWindow;
}
- (BOOL) checkSafeArea:(NSString *)areaPosition {
if (@available(iOS 13.0, *)) {
if ([areaPosition isEqualToString:@"top"]) {
return [self keyWindow].safeAreaInsets.top > 20.0f;
} else {
return [self keyWindow].safeAreaInsets.bottom > 0.0f;
}
} else {
if ([areaPosition isEqualToString:@"top"]) {
return [[[UIApplication sharedApplication] delegate] window].safeAreaInsets.top > 20.0f;
} else {
return [[[UIApplication sharedApplication] delegate] window].safeAreaInsets.bottom > 0.0f;
}
}
return NO;
}
关于objective-c - 以编程方式识别带有 Notch 的 iPhone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55715380/
随着 iPhone X 的发布迫在眉睫,我正试图走在游戏的前面并准备我的一些网络应用程序来处理任何设计更改——其中最大的更改是装有前置摄像头的新“刘海” . 我想知道是否有或可能有任何方法以某种方式在
我正在开发基于flutter的混合移动应用程序,并在其中使用 Google Pixel XL API 28 仿真器。 该应用程序可以正常工作,但是由于屏幕上的缺口,我在该应用程序上的标题被削减了。 我
我有陷波滤波器的概念问题。据我了解,陷波滤波器输出等于高通和低通滤波器输出的总和。但是,MATLAB 中的快速测试并未显示这一点。下面是一些测试代码: % Load a simple signal a
我怎样才能得到最近的安卓手机缺口的高度,最好以像素为单位? 我有一个实现,其中图像必须全屏显示在顶部。 随着最近发布的手机增加了一个缺口,这个图像将被这个缺口剪掉。我的想法是获取缺口高度并在其上方动态
我正在开发 HTML 5 应用程序。这个应用程序将有一个纯蓝色的水平导航栏。子导航项将出现在其下方的另一个水平浅蓝色导航栏中。当用户单击导航栏或子导航栏中的元素时,我希望所选元素出现一个槽口,使其看起
您好,我目前正在使用 DirectX 制作游戏,但我无法获得鼠标滚轮当前槽口或类似的东西。我查找了一个小示例,但找不到真正有效的示例。我看到他们正在使用 Windows 消息 WM_MOUSEWHEE
我正在为一个元素使用 Material-UI,我正在浏览他们的 API。 但是,我不明白 OutlineInput 中的 notched 属性组件 将 notched 属性从 false 切
有没有办法检测和避免手机屏幕上的缺口(例如,iPhone X 中的摄像头缺口),但忽略屏幕的圆角? 例如,这是我在 iPhone 上的横向模式下的应用程序,带有一个缺口: 左边的菜单很好——屏幕的圆角
我正在尝试以编程方式识别带有缺口的 iPhone。我知道 screen.size 方法,但是当你有一个支持所有界面方向的通用应用程序时,它会变得一团糟(计算所有可能的变化)。因此,我正在寻找一种更简单
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试在 react native 中为 iPhone Xs Max 制作一个具体案例? 这是我为 IphoneX 编写的代码,来自 react-native-iphone-x-helper ex
我构建了一个 Cordova 应用程序,它只是启动 InAppBrowser 来显示一个 Web 应用程序。在 iPhone XR 上,该应用程序的顶部有一个黑色边框,并且按钮不会被 iPhone 的
目前我有这个自定义旋转的 QDial() 小部件,其拨盘 handle 指向上方的 0 位置而不是默认的 180 值位置。 要更改刻度间距,setNotchTarget() 用于间隔凹口,但这会创建均
我尝试过统一创建游戏并在任何苹果设备上的 ios 上构建它,除了在 iphone x 上没有问题。截图如下。 enter image description here .它被 iphone x 缺口覆
我想用 Angular Material 实现 Notched Outline Material 主题。 Material Design 提供了一般安装说明(https://material.io/d
我想让我的应用程序的窗口在槽口的两侧绘制。我遵循了 this 的指南文章并在我的 res 文件夹中创建了 values-v28 文件夹。之后,我在 values-v28 文件夹中创建了 styles.
此代码的最终目标是确保客户定义的形状实际上可以由我们的……呃,机器加工。为此,我们将指定的形状向内偏移钻头的半径,然后向外退回相同的量,从而将任何太细而无法实际装入钻头的部分四舍五入。对于多边形偏移,
我是一名优秀的程序员,十分优秀!