尝试以编程方式布局视图时遇到问题,我似乎无法找到一种简洁,简洁的方法来修复它。
我正在使用safeAreaInsets调整视图中某些元素的大小。直到我在iOS 11之前的设备上尝试之前,该方法都可以正常工作。显然,由于缺少safeAreaInsets,我的子视图的大小崩溃了,一切变得一团糟。使用旧版本的iOS时我会退缩什么。
更具体地说,如何在下面的扩展中实现预期的功能?
extension UIView {
func compatibilityInsets() -> UIEdgeInsets {
if #available(iOS 11.0, *) {
return self.safeAreaInsets
} else {
//what goes here?
return self.olderVersionOfInsets
}
}
}
这是我可能如何使用此扩展方法的示例:
var minimumHeaderHeight: CGFloat {
//allows the header height to be 70 below navigation bar
return 70 + view.compatibilityInsets().top
}
答案 0 :(得分:2)
safeAreaInsets
被添加以帮助避免内容消失在仅支持iOS 11 IIRC的iPhone X的“缺口”后面。
因此,iOS 10及以下版本的替代方案为return .zero
,因为不需要定义任何安全区域。
.zero
在这种情况下被推断为UIEdgeInsets
类型,因此等效于调用UIEdgeInsets.zero
。