如何在 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 上的 topLayoutGuide
和 bottomLayoutGuide
属性可用于 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 中指定与安全区域的偏移量?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 11 中的 SafeArea:如何在没有安全区域的情况下使用自定义导航栏在主屏幕上添加来自 Objective-c 代码的视图