当变量为true时,SwiftUI组件内的@Binding Bool变量不会激发



所以我有这样的代码

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变量,那么这也可以代替制作结构。

这可能不是最好的方式。但这是唯一一个对我有效的方法,我很高兴我摆脱了我的问题。

最新更新