我正在尝试让swiftUI视图动态调整大小。我发现这样做的方法是使用如下所示的环境信息:
@Environment(\.horizontalSizeClass) var sizeClass
字符串
然而,它似乎没有返回任何东西。当使用调试器时,我看到变量被设置为'nil'。我做错了什么?我需要启用一个选项或info.plist中的东西吗?
我的代码很简单:
struct ContentView: View {
@Environment(\.horizontalSizeClass) var sizeClass
var body: some View {
if self.sizeClass == .compact {
Home_Vertical()
}
else {
Home_Horizontal()
}
}
}
型
我正在为iPhone开发,并允许所有设备方向。iOS部署目标是iOS 14.0,xCode的版本是12.3。
3条答案
按热度按时间yptwkmov1#
大小类的工作不同于方向。
例如,对于iPhone 12 Pro,您有两种组合:
orientation: vertical
->verticalSizeClass: regular
,horizontalSizeClass: compact
orientation: horizontal
->verticalSizeClass: compact
,horizontalSizeClass: compact
这意味着对于大多数iPhone来说,无论方向如何,
@Environment(\.horizontalSizeClass) var sizeClass
都将始终是compact
。一般来说,您应该根据大小类而不是设备方向来设计视图。
但是,如果您真的想根据方向更改视图,您可以订阅
UIDevice.orientationDidChangeNotification
,如下所述:yizd12fk2#
它是可选的接口声明(见下文),所以它是“通过设计”-这意味着系统可能还没有检测到大小类,它将在以后更新。您应该显式处理这种情况,以适合您的应用程序。
字符串
s8vozzvw3#
在我的例子中,当在
App
上声明并在WindowGroup
中使用时,@Environment(\.horizontalSizeClass)
返回nil
。将环境变量移动到根视图后,它返回正确的值。