代码之家  ›  专栏  ›  技术社区  ›  Craigt

安全区向后兼容性

  •  2
  • Craigt  · 技术社区  · 6 年前

    我在试图以编程方式布局视图时遇到了一个问题,我似乎找不到一种简洁、非黑客的方法来解决它。

    我正在使用safeAreaInsets调整视图中某些元素的大小。在我在iOS 11之前的设备上试用之前,这一切都很好。很明显,由于缺少安全区域插图,我的子视图的大小会崩溃,一切都变得一团糟。当我使用旧版本的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 回复  |  直到 6 年前
        1
  •  2
  •   Fogmeister    6 年前

    safeAreaInsets 是为了避免内容消失在iPhone X的“缺口”后面。。。它只支持iOS 11 IIRC。

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

    .zero 在这种情况下,被推断为 UIEdgeInsets 所以这相当于打电话 UIEdgeInsets.zero .