@当变量为true时,SwiftUI组件内的绑定Bool变量不会触发
所以我有这样的代码@当变量为true时,SwiftUI组件内的绑定Bool变量不会触发,swiftui,Swiftui,所以我有这样的代码 struct MyComponent: View { @Binding var isShowing: Bool var body: some View { Text("sample") .offset("") .offset(y: isShowing ? -100: 0) //values just for example .animation
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)
}
}
@Binding var isShowing: Bool {
didSet {
didShow()
}
}
我想在isShowing为真时添加一个didShow回调。我遇到的问题是这个代码
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)
}
}
@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
})
}
如果您只是将其转换为视图中的内部视图变量,则也可以使用该方法,而不是生成结构
这可能不是最好的办法。但这是唯一对我有效的方法,我很高兴我摆脱了我的问题。属性包装器不调用
didSet
应该是你的解决方案。这回答了你的问题吗@陈海腾:是的,很管用!唯一的问题是它只适用于ios 14及以上版本。但是是的,谢谢!