【问题标题】:How to detect dynamic-island size and changes in SwiftUI & UIKit如何检测 SwiftUI 和 UIKit 中的动态岛大小和变化
【发布时间】:2022-12-19 15:42:45
【问题描述】:

如何检测iPhone 14 pro的尺寸和变化动态岛

由于安全区域在圆形屏幕和顶部或底部插图内提供了一个安全矩形,但与对象无关里面矩形。

我们对安全区的了解:

【问题讨论】:

  • 我在想一个更好的问题是:如果我们不希望我们的内容被岛屿明显阻挡,我们是否需要调整布局以适应岛屿变化?我只是假设答案是不,我们不应该为此担心;这个岛是应该阻止以下内容,因此我们实际上不需要做任何事情。除非有人不同意,否则请插话。

标签: swift xcode swiftui uikit dynamic-island


【解决方案1】:

我们还不知道,因为 Apple 还没有为 Dynamic Island 发布任何 API。当前Xcode 14 Release Candidate不包含相关API。

Apple engineers in the developer forum 解释说这将在“今年晚些时候”出现在 iOS 16 和 Xcode 中。

【讨论】:

  • API 现已发布,因此您可以删除此答案。并不是说他们发布的任何 API 都可以解决 OP 帖子中的问题。
【解决方案2】:

您可以简单地尝试获取安全区域顶部插图并根据需要使用动态高度。

在我的场景中,要求是更改状态栏背景颜色。所以我做了这样的事情:

    let window = UIApplication.shared.windows.first
    let topPadding = window?.safeAreaInsets.top
    let statusBar = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: topPadding ?? 0.0))
    statusBar.backgroundColor = UIColor(named: "AppPrimaryColor")
    UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.addSubview(statusBar)

动态岛玩起来很有趣。 screen shot

【讨论】:

    【解决方案3】:

    首先,对于大多数开发人员来说,像我们之前那样使用safeArea 就足够了,因为动态岛不会覆盖它(如果不处于展开状态)。 fynamic island目前有3种状态:

    1. 袖珍的。在 Dynamic Island 中,当当前只有一个 Live Activity 处于活动状态时,系统会使用紧凑的呈现方式。
    2. 最小的.当多个 Live Activity 处于活动状态时,系统会使用最小呈现方式在 Dynamic Island 中显示其中两个。一个 Live Activity 显示为附加到 Dynamic Island,而另一个显示为分离。

      1. 展开.当人们触摸并按住紧凑或最小演示中的实时活动时,系统会以扩展演示的形式显示内容。

      如果您自己使用动态岛作为 WidgetKit 的一部分,则可以检查每个状态。如果您的应用程序还没有包含一个新的小部件扩展,请创建一个新的小部件扩展。现场活动使用组件套件功能和斯威夫特用户界面对于他们的用户界面。新建Activity请参考Apple official documentation for Displaying live data with Live Activities。 如果您不打算使用 Activities,但想以某种方式了解动态岛的可用大小,Apple 会提供 Live Activities documentation 中包含的动态岛尺寸表:

      这是使用动态岛实现 safeArea 的附件:

    【讨论】:

      猜你喜欢
      • 2022-11-02
      • 2015-04-26
      • 2016-03-19
      • 2022-11-19
      • 2020-02-24
      • 1970-01-01
      • 2023-04-06
      • 2022-06-18
      • 2011-07-28
      相关资源
      最近更新 更多