我在使用 XCode 13.2 的專案中有以下簡化代碼。預期的功能是有 2 個選項卡(Tab1和Tab2),用戶可以點擊螢屏Tab2將背景從紅色切換到綠色。
但是,當Tab2單擊 時,螢屏會顯示選項卡 1,而不是Tab2更改后的顏色。我想知道為什么應用程式會Tab1在Tab2被點擊時進入。
沒有使用戶轉到 的導航鏈接或操作Tab1。我唯一的想法是應用程式可能在Tab2單擊時正在重建,這就是它回傳到第一個選項卡的原因?如果是這樣,是否有任何好的解決方法?
注意:顏色仍會更改Tab2,但不會在應用程式切換到 之前更改Tab1。
struct ContentView: View {
var body: some View {
TabView {
Tab1()
.tabItem {
Text("Tab 1")
}
Tab2()
.tabItem {
Text("Tab 2")
}
}
}
}
struct Tab1: View {
var body: some View {
Text("Tab 1")
}
}
struct Tab2: View {
@State var isRed: Bool = false
var body: some View {
if !isRed {
Color.green
.onTapGesture {
isRed = true
}
} else {
Color.red
.onTapGesture {
isRed = false
}
}
}
}
uj5u.com熱心網友回復:
點擊 Tab2 使其跳回 Tab1 的原因是,每當您點擊 Tab2 時,它的結構標識都會發生變化,從而導致 swiftUI 重新加載主體。請參閱此處的說明。對上面示例的一個簡單修復是將整個身體包裹在一個ZStack
var body: some View {
ZStack {
if !isRed {
Color.green
.onTapGesture {
isRed = true
}
} else {
Color.red
.onTapGesture {
isRed = false
}
}
}
}
uj5u.com熱心網友回復:
我注意到以這種方式使用 if/else 會導致奇怪的行為。如下所示重構 Tab2,它應該可以按預期作業。
struct Tab2: View {
@State var isRed: Bool = false
var body: some View {
ZStack {
Color.red
Color.green
.opacity(isRed ? 0 : 1)
}
.onTapGesture {
isRed.toggle()
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/396489.html
