所以我有这样的代码
struct MyComponent: View {
@Binding var isShowing: Bool
var body: some View {
Text("sample")
.offset("")
.offset(y: isShowing ? -100: 0) //values just for example
.animation(.easeInOut, value: isShowing)
}
}
我想在isShowing为true时添加一个didShow回调。我遇到的问题是这个代码
@Binding var isShowing: Bool {
didSet {
didShow()
}
}
只有当isShowing为false时才会激发。
我在这里被困了好几天。
对我有效的是,我制作了一个空视图,它在其onAppear和onDisappear 上执行回调插入
struct CallbackView: View {
let onAppear: (()->())?
let onDisappear: (()->())?
init(onAppear: (()->())? = nil, onDisappear: (()->())? = nil) {
self.onAppear = onAppear
self.onDisappear = onDisappear
}
var body: some View {
VStack {
Spacer()
}
.frame(width: 0, height: 0)
.onAppear {
self.onAppear?()
}
.onDisappear {
self.onDisappear?()
}
}
然后我把它添加到MyComponent的主体中,就像:
if isShowing {
CallbackView(onAppear: {
//.. do something
},
onDisappear: {
//.. do something
})
}
如果您只是将其制作成View内部的内部View变量,那么这也可以代替制作结构。
这可能不是最好的方式。但这是唯一一个对我有效的方法,我很高兴我摆脱了我的问题。