SwiftUI - 在 iPad 上处理 regular/regular 大小 类
SwiftUI - Deal with regular/regular size classes on iPad
我需要为 iPad 的横向和纵向布局设置不同的布局,但 iPad 上的大小 类 始终为 regular/regular。 Apple 推荐的调整界面的方法是使用大小为 类 的自适应布局,但在 iPad 上纵向和横向模式没有区别。
有什么方法可以在 iPad 上显示不同的纵向和横向布局而不检测设备方向?
例如,在 iPhone (compact/regular) 上将显示为:
而在 iPad 上,横向 (regular/regular) 将显示为:
因此,目标是在纵向模式下在 iPad 上显示 iPhone 布局。
谢谢!
您可以根据方向强制应用水平尺寸 class。如果我正确理解你的目标,这里是一个可能方法的演示(使用 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 的横向和纵向布局设置不同的布局,但 iPad 上的大小 类 始终为 regular/regular。 Apple 推荐的调整界面的方法是使用大小为 类 的自适应布局,但在 iPad 上纵向和横向模式没有区别。
有什么方法可以在 iPad 上显示不同的纵向和横向布局而不检测设备方向?
例如,在 iPhone (compact/regular) 上将显示为:
而在 iPad 上,横向 (regular/regular) 将显示为:
因此,目标是在纵向模式下在 iPad 上显示 iPhone 布局。
谢谢!
您可以根据方向强制应用水平尺寸 class。如果我正确理解你的目标,这里是一个可能方法的演示(使用 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)
}
}