如何在 11 以下的 iOS 中指定与安全区域的偏移量?

Posted

技术标签:

【中文标题】如何在 11 以下的 iOS 中指定与安全区域的偏移量?【英文标题】:How to specify offset from safe area in iOS below 11? 【发布时间】:2018-03-10 11:43:26 【问题描述】:

ios 11 中我使用

safeAreaInsets

指定从安全区域到我的自定义视图的偏移量,如下所示:

var frame: CGRect
if #available(iOS 11.0, *) 
    frame = CGRect(x:0,
                   y: self.view.safeAreaInsets.top + 16,
                   width: 100,
                   height: 50)
 else 
//backward compatibility to previous versions?


let customView = CustomView(frame: frame)

self.view.addSubview(customView)

问题是 - 如何在以前版本的 iOS 中指定安全区域的偏移量?提前致谢!

【问题讨论】:

iOS 11 safe area layout guide backwards compatibility的可能重复 【参考方案1】:

iOS 11 之前的 iOS 版本没有安全区域插图。这些始于 iPhone X(iOS 11 随附)的推出。

在旧版本的 iOS 上无需补偿这些插图。

这就是你的代码应该看起来像向后兼容

var frame: CGRect
if #available(iOS 11.0, *) 
    frame = CGRect(x:0,
                   y: self.view.safeAreaInsets.top + 16,
                   width: 100,
                   height: 50)
 else 
    frame = CGRect(x:0,
               y: topLayoutGuide.length + 16,
               width: 100,
               height: 50)


let customView = CustomView(frame: frame)

self.view.addSubview(customView)

注意: 如果您使用 iOS 11 的安全区域布局指南,则 UIViewController 上的 topLayoutGuidebottomLayoutGuide 属性可用于 iOS 7 - 10。

【讨论】:

安全区域插图早在 iOS 11 之前就已经存在。iOS 11 只是对安全区域 API 进行了改进,使其更加直观,包括命名约定。如果你需要在 iOS 11 中考虑它们,你应该在 iOS 10 中考虑它们。 developer.apple.com/documentation/uikit/uiview/… 请参阅此文档。它还明确指定仅在 iOS 11+ 上支持安全区域插入。我们为视图的顶部和底部提供了安全区域布局指南,以说明标签栏和导航栏等内容【参考方案2】:
let safeAreaTop: CGFloat

if #available(iOS 11.0, *) 
    safeAreaTop = view.safeAreaInsets.top
 else 
    safeAreaTop = topLayoutGuide.length


let frame = CGRect(x:0, y: safeAreaTop + 16, width: 100, height: 50)

【讨论】:

以上是关于如何在 11 以下的 iOS 中指定与安全区域的偏移量?的主要内容,如果未能解决你的问题,请参考以下文章

一种在 SSH 隧道中指定与正在使用的主机不同的主机的方法

在导航栏iOS 11安全区域下定位视图

iOS 11 中的 SafeArea:如何在没有安全区域的情况下使用自定义导航栏在主屏幕上添加来自 Objective-c 代码的视图

如何使用 Swift 制作具有 iPhone X 安全区域约束的 Webkit webView?

iOS11中没有状态栏的导航栏与安全区域重叠

扩展iOS 11安全区域以包括键盘