返回
UI 布局的利器:SwiftUI 中 Size Class 全解析
IOS
2023-11-04 09:48:56
使用 Size Class 创建不同的布局
SwiftUI 通过使用 Size Class 来创建不同的布局。要使用它们,您需要在您的视图中使用 `@Environment(\.horizontalSizeClass)` 和 `@Environment(\.verticalSizeClass)` 修饰符。这些修饰符允许您访问设备当前的 Size Class。
以下是 Size Class 的不同组合:
* **Compact Width, Regular Height** : 这是 iPhone 和大多数其他智能手机使用的 Size Class。
* **Regular Width, Regular Height** : 这是 iPad 和大多数平板电脑使用的 Size Class。
* **Compact Width, Compact Height** : 这是 Apple Watch 和其他可穿戴设备使用的 Size Class。
* **Regular Width, Compact Height** : 这是 Apple TV 和其他电视设备使用的 Size Class。
您可以使用这些 Size Class 来创建针对不同设备的自定义布局。例如,您可以为 iPhone 创建一个紧凑的布局,为 iPad 创建一个更宽松的布局。
以下是如何在 SwiftUI 中使用 Size Class 来创建不同布局的示例:
```swift
struct MyView: View {
@Environment(\.horizontalSizeClass) var horizontalSizeClass
@Environment(\.verticalSizeClass) var verticalSizeClass
var body: some View {
if horizontalSizeClass == .compact && verticalSizeClass == .regular {
// This is the layout for iPhone.
VStack {
Text("Hello, world!")
Button("Tap me") {
// Do something.
}
}
} else if horizontalSizeClass == .regular && verticalSizeClass == .regular {
// This is the layout for iPad.
HStack {
Text("Hello, world!")
Button("Tap me") {
// Do something.
}
}
} else {
// This is the layout for other devices.
Text("Hello, world!")
}
}
}
```
这个例子中,`MyView` 的布局会根据设备的不同而变化。在 iPhone 上,布局将是垂直的,在 iPad 上,布局将是水平的。在其他设备上,布局将只是一个简单的文本视图。
## 响应屏幕方向的变化
Size Class 还可以用于响应屏幕方向的变化。当设备旋转时,Size Class 会自动更新。您可以使用这些更新来更改您的视图的布局。
以下是如何在 SwiftUI 中使用 Size Class 来响应屏幕方向变化的示例:
```swift
struct MyView: View {
@Environment(\.horizontalSizeClass) var horizontalSizeClass
var body: some View {
if horizontalSizeClass == .compact {
// This is the layout for portrait orientation.
VStack {
Text("Hello, world!")
Button("Tap me") {
// Do something.
}
}
} else {
// This is the layout for landscape orientation.
HStack {
Text("Hello, world!")
Button("Tap me") {
// Do something.
}
}
}
}
}
```
这个例子中,`MyView` 的布局会根据屏幕方向的不同而变化。在纵向模式下,布局将是垂直的,在横向模式下,布局将是水平的。
## 总结
Size Class 是 SwiftUI 中一种强大的工具,可用于创建动态布局和响应不同设备和屏幕方向变化。通过使用 Size Class,您可以确保您的应用在所有设备上都看起来很棒。