在我现有的应用程序中,几乎没有 UI 配置,例如在所有视图控制器上设置自定义导航栏、设置全屏背景图像等等。为此,在viewWillAppear所有视图控制器中的基本视图控制器中进行配置并从它继承。所以配置是在子视图控制器中不做任何事情的情况下进行的
如何使用 SwiftUI 实现类似的实现?
SwiftUI在 View 上提供了onAppear()&onDisappear()方法,它是 Struct,不支持继承。如果我制作扩展方法或协议,我必须从所有视图调用方法。
任何帮助表示赞赏...
制作您自己的容器视图。您可以使用@ViewBuilder使您的视图表现得像VStack以及HStack它需要一个充满子视图的内容闭包的位置。
例如,这是一个自定义容器,它为主要内容提供粉红色背景,并在其下方放置一个工具栏:
import SwiftUI
struct CustomContainer<Content: View>: View {
init(@ViewBuilder content: () -> Content) {
self.content = content()
}
let content: Content
var body: some View {
VStack(spacing: 0) {
content
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color(hue: 0, saturation: 0.3, brightness: 1))
Toolbar()
}
}
}
struct Toolbar: View {
var body: some View {
HStack {
Spacer()
button("person.3.fill")
Spacer()
button("printer.fill")
Spacer()
button("heart.fill")
Spacer()
button("bubble.left.fill")
Spacer()
} //
.frame(height: 44)
}
private func button(_ name: String) -> some View {
Image(systemName: name)
.resizable()
.aspectRatio(contentMode: .fit)
.padding(4)
.frame(width: 40, height: 40)
}
}
Run Code Online (Sandbox Code Playgroud)
然后这是一个使用它的视图:
struct HelloView: View {
var body: some View {
CustomContainer {
VStack {
Text("hello")
Text("khawar")
}
}
}
}
import PlaygroundSupport
PlaygroundPage.current.setLiveView(HelloView())
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |