概述
在 WWDC 24 新推出的 SwiftUI 6.0 中,苹果对于容器内部子视图的布局有了更深入的支持。为了能够未雨绸缪满足实际 App 中所有可能的情况,我们还可以再接再厉,将 Sections 的支持也考虑进去。
SwiftUI 6.0 对容器子视图布局的增强支持可以认为是一个小巧的容器自定义布局(Custome Layout)简化器。
在本篇博文中,您将学到如下内容:
有了全新容器子视图布局机制的加持,现在对于任何需要适配自定义容器行为的情况我们都可以游刃有余、从容应对了!
那还等什么呢?Let‘s go!!!
5. 再进一步:支持段(Sections)的容器子视图布局
5.1 更小的容器组织单位:Section
在实际 App 布局的“摆放”中,我们往往会进一步用段(Sections)来划分容器中的海量内容,这在 List 或 Form 等 SwiftUI 内置容器里是司空见惯的事情:
struct ContentView: View {
var body: some View {
Form {
Section("概述") {
Color.yellow
.frame(height: 100)
Text("Hello World")
}
Section("高级") {
Color.red
.frame(height: 100)
Toggle("成为黑悟空", isOn: .constant(true))
.tint(.pink)
.padding(.horizontal)
}
Section("其它") {
Color.green
.frame(height: 100)
}
}
.font(.largeTitle.bold())
}
}
在上面的代码中,我们将之前容器中所有子视图都划分到 3 个独立的 Section 中去了:
那么问题来了:我们的自定义容器能否识别传入内容中的 Sections?
答案是肯定的!
可能聪明的小伙伴们都已经猜到了,之前我们讨论过的 SwiftUI 6.0 中 ForEach 和 Group 的新构造器都有支持 Sections 的重载形式:
下面我们就看看如何利用它