SafeArea向后兼容

时间:2018-06-20 10:07:59

标签: ios swift safearealayoutguide uiedgeinsets

尝试以编程方式布局视图时遇到问题,我似乎无法找到一种简洁,简洁的方法来修复它。

我正在使用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
}

1 个答案:

答案 0 :(得分:2)

safeAreaInsets被添加以帮助避免内容消失在仅支持iOS 11 IIRC的iPhone X的“缺口”后面。

因此,iOS 10及以下版本的替代方案为return .zero,因为不需要定义任何安全区域。

.zero在这种情况下被推断为UIEdgeInsets类型,因此等效于调用UIEdgeInsets.zero