所以我想在另一個視圖的 ZStack 頂部放置一個顏色。我不想使用疊加層的原因是顏色將附加一個點擊手勢。下面是一個最小的可重現示例。本質上,我希望 Color.secondary 被限制在與 HStack 相同的區域(沒有明確設定幀大小。這是代碼:
struct ContentView: View {
var body: some View {
ZStack {
HStack {
Spacer()
Button(action: {
print("tapped button")
}, label: {
Text("button")
})
}.background(Color.red)
Color.secondary
.onTapGesture {
print("clicked color")
}
}
}
}
所以我希望視圖只是一個白色的螢屏,帶有一個看起來稍微深一點的紅色的 HStack。
下面是我的用戶界面的圖片。該視圖在入職期間呈灰色,用戶基本上只需點擊灰色區域即可進入入職的下一步。如果我將點擊手勢附加到顏色視圖,然后根據狀態更改隱藏顏色視圖,這不是問題。入職完成后,灰色區域將不存在,下方的按鈕需要可互動。使用疊加層時,在入職后,我不想點擊視圖上的任何地方來更改應用程式狀態。
https://i.stack.imgur.com/lphHg.png
uj5u.com熱心網友回復:
鑒于您的進一步描述,我相信您onTapGesture(perform:)在錯誤的地方,在外面overlay而不是里面。
在下面的代碼中,onTapGesture(perform:)只能在顯示時點擊灰色疊加層。但是,當它附加在 之后時overlay,可以在不點擊按鈕之類的東西時點擊它。
作業代碼:
struct ContentView: View {
@AppStorage("is_onboarding") var isOnboarding = true
var body: some View {
HStack {
Spacer()
Button {
print("tapped button")
} label: {
Text("button")
}
}
.background(Color.red)
.overlay {
if isOnboarding {
Color.secondary
.onTapGesture {
print("clicked color")
isOnboarding = false
}
}
}
}
}
如果在 iOS 14 而非 iOS 15 上,請改用以下內容overlay:
.overlay(
isOnboarding ?
Color.secondary
.onTapGesture {
print("clicked color")
isOnboarding = false
}
: nil
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/399415.html
