ipad - SwiftUI - 在 iPad 上处理常规/常规尺寸类别

标签 ipad swiftui landscape size-classes portrait

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

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

例如,在 iPhone(紧凑/常规)上将显示为:

enter image description here

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

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

谢谢!

最佳答案

您可以根据方向强制应用水平尺寸类别。如果我正确理解了你的目标,这里是一个可能方法的演示(使用 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)
    }
}

关于ipad - SwiftUI - 在 iPad 上处理常规/常规尺寸类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65271273/

相关文章:

ios - 不应在主线程上调用该方法,因为这可能会导致 UI 无响应

android - 如何在android中的方向变化中加载不同的xml文件

iPhone iOS 6 UITabBarController 仅纵向,如何让模态视图 Controller 支持横向方向

cordova - PhoneGap Build 中 Android 的横向启动屏幕

ipad - 核心数据示例,无效更新 : invalid number of rows in section 0

iOS 8.2 [NSUserDefaults standardUserDefaults] 返回 nil

ios - 在 iOS 上将 SwiftUI View 转换为 PDF

ios - SwiftUI 的 minimumFontScale 等价物是多少?

iphone - 函数 ZAssert 的隐式声明在 C99 中无效

jquery - ontouchmove 事件获取 "this"?