【问题标题】:iOS - Safe Area Layout not work on iOS 9 and iOS 10iOS - 安全区域布局不适用于 iOS 9 和 iOS 10
【发布时间】:2018-06-06 19:25:32
【问题描述】:

这里是约束:

它在 iOS11 上运行良好,但在 iOS9 和 iOS 10 上无法运行。

您可以通过here下载示例。

注意:必须将 UISwitch 添加到 RedView 并使用 Safe Area Layout。

【问题讨论】:

  • 请添加您想要的图像。预期的设计是什么?我们无法猜测正确的设计。对不起
  • 如果您支持旧版本的 iOS,请关闭 安全区域
  • @TungFam 设计是iOS11上的效果。

标签: ios


【解决方案1】:

https://developer.apple.com/documentation/uikit/uiview/2891102-safearealayoutguide

safeAreaLayoutGuide 是在 iOS 11 中引入的。难怪它在 iOS 9 和 10 中不起作用。

对于旧版本,请考虑改用 layoutMargins 属性。

let window = UIApplication.shared.keyWindow
let topPadding = window?.layoutMargins

【讨论】:

    【解决方案2】:

    在我的例子中,将 edgesForExtendedLayout 设置为 iOS 10 的空数组具有预期的效果。 完整答案在这里:https://stackoverflow.com/a/51247890/3885491

    【讨论】:

      【解决方案3】:

      如果您使用的是故事板,那么它会起作用,因为故事板是向后兼容的。请记住,故事板隐藏了实际代码中的差异,不利于深入理解......


      如果您以编程方式进行,那么:

      Safe Area Layout Guide Tutorial 。 SafeArea 仅在 iOS 11 中可用。对于非 iOS 11,您必须使用 topLayoutGuide.bottomAnchor

      更多信息见On iOS, what are the differences between margins, edge insets, content insets, alignment rects, layout margins, anchors…?

      【讨论】:

      • Apple 在WWDC 2017 Session 412 中告诉我们,使用安全区域的情节提要可以向后部署。
      • 你是对的。仅从纯粹的学习角度来看,我的回答指出了它们之间的差异。最好知道它们的区别,不要让 Xcode 只做我们不知道的事情。
      • 好的,我会制定一个时间表来了解他们的不同之处,感谢您的建议。 :)
      • 这个答案具有误导性,原因与艾伦提到的相同。
      【解决方案4】:

      您是否正在努力实现这一目标? (左边是ios10,右边是ios 11)

      如果是,你可以下一步:

      1. 从红色视图中移除安全区域
      2. 将 UISwitch 的顶部约束设置为 视图控制器视图 的安全区域,而不是红色视图的顶部。

      【讨论】:

        【解决方案5】:

        我检查了您的代码,发现您的 Red View 的顶部约束不正确。您的 Red View 应该从 Safe Area 而不是 superview 对齐顶部。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-28
          • 1970-01-01
          • 1970-01-01
          • 2018-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-11
          相关资源
          最近更新 更多