实现思路
- 在SwiftUI中创建一个自定义视图容器结构体,该结构体遵循
View
协议。
- 使用
HStack
来实现子视图的水平排列。
- 为了让每个子视图宽度相等,可以使用
GeometryReader
获取父视图的宽度,然后根据子视图的数量来分配宽度。
- 为了适配不同屏幕尺寸,
GeometryReader
会自动根据当前设备屏幕尺寸动态调整子视图的宽度。
关键代码
import SwiftUI
struct EqualWidthHStack: View {
let subviews: [AnyView]
var body: some View {
GeometryReader { geometry in
HStack {
ForEach(subviews, id: \.self) { subview in
subview
.frame(width: geometry.size.width / CGFloat(subviews.count))
}
}
}
}
}
// 使用示例
struct ContentView: View {
var body: some View {
EqualWidthHStack(subviews: [
AnyView(Color.red),
AnyView(Color.green),
AnyView(Color.blue)
])
}
}