返回

神秘改变的屏幕高度 UIScreen.main.bounds.height 的来龙去脉及解决方案

Android

SwiftUI 变革:苹果的悄然改变

SwiftUI 的强大优势

SwiftUI 是苹果赋予 iOS 开发者的强大工具,它让构建用户界面变得前所未有地轻松。在 iOS 13 中,UIScreen.main.bounds.height 属性的值始终与 UIScreen.main.nativeBounds.height 属性的值相等,这使得开发人员能够轻松地为所有设备创建响应式布局。

苹果的悄悄改动

然而,苹果最近悄悄地改变了 UIScreen.main.bounds.height 属性的值。例如,在 iPhone 11 Pro 上,它的值从 1125pt 更改为 812pt。这意味着依赖该属性值确定布局的应用程序在 iPhone 11 Pro 上可能会出现问题。

应对苹果改动的解决方案

为了应对苹果这一改动,开发人员可以采取以下措施:

  1. 转向 UIScreen.main.nativeBounds.height

UIScreen.main.nativeBounds.height 属性的值始终与设备屏幕的原生分辨率相等,因此它不会受到苹果改动的影响。开发者可以使用这个属性替代 UIScreen.main.bounds.height 来确定布局。

  1. 使用安全区域

安全区域是 SwiftUI 提供的另一个工具,可以帮助开发人员在不同设备上创建响应式布局。安全区域是指设备屏幕上不包含刘海、圆角和其他系统元素的区域。开发者可以使用安全区域确保应用程序在所有设备上都能正确显示。

  1. 实施自动布局

自动布局是苹果提供的自动布局系统,可以帮助开发人员创建灵活且响应式的布局。自动布局可以根据设备屏幕的大小自动调整视图的大小和位置,从而确保应用程序在所有设备上都能美观地呈现。

保持敏捷,拥抱改变

虽然苹果的改动可能给开发人员带来不便,但它也提醒我们,软件开发是一个不断变化的过程。作为开发人员,我们必须保持敏捷,随时准备应对苹果的改变。通过采用 UIScreen.main.nativeBounds.height、安全区域和自动布局等工具,我们可以轻松地应对苹果的改动,确保我们的应用程序在所有设备上都能完美运行。

代码示例

以下代码示例演示了如何使用 UIScreen.main.nativeBounds.height 属性:

import SwiftUI

struct MyView: View {
    var body: some View {
        VStack {
            Text("Hello, world!")
            Spacer()
            Text("Screen height: \(UIScreen.main.nativeBounds.height)")
        }
        .frame(height: UIScreen.main.nativeBounds.height)
    }
}

常见问题解答

  1. 为什么苹果会改变 UIScreen.main.bounds.height 属性的值?

苹果尚未透露其做出这一改动的确切原因。

  1. 这一改动是否会影响我的现有应用程序?

如果你的应用程序依赖于 UIScreen.main.bounds.height 属性的值来确定布局,那么它可能会在 iPhone 11 Pro 及更高版本上出现问题。

  1. 有哪些替代方法可以在不同设备上创建响应式布局?

除了 UIScreen.main.nativeBounds.height 属性之外,还可以使用安全区域和自动布局来创建响应式布局。

  1. 我应该使用哪种方法应对苹果的改动?

最佳方法取决于应用程序的特定需求。对于简单的布局,可以使用 UIScreen.main.nativeBounds.height 属性。对于更复杂的布局,可能需要结合使用安全区域和自动布局。

  1. 苹果的改动是否预示着未来更多改动?

苹果经常对 iOS 进行改动,因此未来可能会进行更多改动。作为开发人员,重要的是保持敏捷,随时准备应对这些改动。