如何在 iOS 中检测屏幕圆角

Posted

技术标签:

【中文标题】如何在 iOS 中检测屏幕圆角【英文标题】:How to detect rounded screen corners in iOS 【发布时间】:2018-02-28 15:20:15 【问题描述】:

开启 (https://developer.apple.com/ios/human-interface-guidelines/overview/iphone-x) Apple 告诉我们“出现在屏幕底部的全角按钮在具有圆角并与安全区域底部对齐时看起来最好……”

所以如果屏幕的角是圆的,我想圆角我的按钮的角,但是当屏幕角是锐利的时候有锐角。

我只想查看应用程序是否在 iPhone X 上运行,但我预计未来的设备也会有圆角,我不想每次新设备推出时都重新访问此代码。

我已经在我的应用委托中检查了window.layer.cornerRaidus...

【问题讨论】:

考虑到我们必须如何检查 iphone-x,我认为不会有一个干净的方法来找出这个 @MilanNosáľ 是对的。您必须检查设备型号。为此,您可以使用this kit 我会提出一个反问:为什么要在 iOS 中检测圆角屏幕?我的意思是理解你的原因,但仍然为什么...Apple 说不这样做,你不能创建一个面向未来的算法来检测它。 “出现在屏幕底部的全角按钮在具有圆角并与安全区域底部对齐时看起来最好......”也适用于任何其他设备。这种定制与苹果的意图和准则相矛盾。 PS:也许您将“安全区域的角落”与设备屏幕的圆角混淆了 【参考方案1】:

检测底部安全区域下方的非零区域,而不是检测圆角。如果该区域足够大,请对齐它(但显然不在其中),并可能将按钮的角落作为您对未来的随机赌注。如果没有,请在按钮下方保留标准的自动布局下边距并使用标准按钮 UI。

无论您做什么,请注意 Apple 可能会或将要更改其 UI 指南和 UI API 和外观,因此不要计划您的面向未来的设计是面向未来的。

【讨论】:

【参考方案2】:

考虑到我们必须如何检查我们是否在 iphone-x 上(例如,请参阅 this SO answer),我认为没有并且很快就会有一种干净的方法来找出这一点。

此外,在我看来,安全区的存在表明不希望检测到这一点。安全区域是一个你可以在其中绘制的矩形,你不应该在它之外绘制,或者我什至会说你甚至不应该关心那里有什么(或没有什么)。

摘自Positioning Content Relative to the Safe Area:

安全区域可帮助您将视图置于整个界面的可见部分。

这是保证对你的布局有用的东西,你不应该真正关心它的外部。

关于你引用的the guidelines:

插入全角按钮。

延伸到屏幕边缘的按钮可能看起来不像按钮。尊重全宽按钮两侧的标准 UIKit 边距。出现在屏幕底部的全角按钮在具有圆角并与安全区域的底部对齐时看起来最好——这也确保它不会与 Home 指示器冲突。

请注意,这里没有提到屏幕的圆角。因此,虽然这是他们推荐这种布局背后的原因,这是一个公平的假设,但我不会过早地尝试概括它。

【讨论】:

然而,对于 iPhone X 仪表板上的 Dock,边角是圆角的,不会延伸到屏幕边缘,而在 iPhone 8 上,边角是尖锐的,do 延伸到屏幕边缘。 @DanielT。你想说什么?我同意你的意见和指导方针,iPhoneX 应该是圆角的。我只是说将这个决定与圆角的屏幕联系起来可能是过早的概括。他们确实告诉你在 iPhoneX 上给它圆角,而不是在其他设备上,但他们不会将它与屏幕的圆角连接。您假设他们决定推荐它是因为屏幕的圆角。我承认这是一个合理的假设,但就目前而言,这只是一个假设。 @DanielT。最后,您可能是对的,但是由于他们没有明确使用该推理,因此我认为他们不会提供您想要的不错的 API。考虑到他们确实为 iPhoneX 推荐了特定布局,并且然而,没有一种很好且干净的标准方法来检测您是否在 iPhoneX 上。 我需要知道屏幕角是否是圆角的,以及动画呈现和关闭视图的实际半径,该视图应该与屏幕角的扩展和收缩相匹配。

以上是关于如何在 iOS 中检测屏幕圆角的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中,当用户滚动浏览 WKWebView 时,如何检测屏幕上可见的 html 元素?

如何在屏幕外剪辑 ImageView 的角(圆角)

如何在 Xamarin.Forms 中获取/检测屏幕大小?

如何检测屏幕截图事件并在科尔多瓦中停止它

iOS给UIImageView添加圆角的三种方法

在 Cordova 中检测倒置屏幕