【问题标题】:SwiftUI - Deal with regular/regular size classes on iPadSwiftUI - 在 iPad 上处理常规/常规尺寸类
【发布时间】:2025-12-15 08:35:01
【问题描述】:

我需要在横向和纵向上为 iPad 制作不同的布局,但 iPad 上的尺寸等级始终是常规/常规的。 Apple 推荐的适配界面的方法是使用具有大小类的自适应布局,但在 iPad 上,纵向和横向模式没有区别。

有没有什么方法可以在不检测设备方向的情况下在 iPad 上呈现纵向和横向的不同布局?

例如,在 iPhone (compact/regular) 上将显示为:

在 iPad 上,横向(常规/常规)将显示为:

因此,目标是在 iPad 上显示 iPhone 布局时处于纵向模式。

谢谢!

【问题讨论】:

  • Apple 建议 iPad 上的纵向和横向使用相同的布局

标签: ipad swiftui landscape size-classes portrait


【解决方案1】:

您可以根据方向强制应用水平尺寸等级。如果我正确理解您的目标,这里是一个可能方法的演示(使用 Xcode 12.1 / iOS 14.1 测试):

struct DemoViewSizes: View {
    @Environment(\.horizontalSizeClass) var horizontalSizeClass

    @State private var orientation = UIDevice.current.orientation

    var body: some View {
        Text("root_view_here")
            .onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
                orientation = UIDevice.current.orientation
            }
            .environment(\.horizontalSizeClass, orientation == .portrait ? .compact : .regular)
    }
}

【讨论】: