【问题标题】:SafeArea backwards compatibilitySafeArea 向后兼容性
【发布时间】:2018-06-20 10:07:58
【问题描述】:

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

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

【问题讨论】:

    标签: ios swift safearealayoutguide uiedgeinsets


    【解决方案1】:

    添加safeAreaInsets 是为了帮助避免内容消失在 iPhone X 中的“缺口”后面...它仅支持 iOS 11 IIRC。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多