我在 macOS 應用程式中使用 SwiftUI 時遇到了一些意外行為。我向 Apple 提交了反饋,以防它是一個錯誤,但它實際上可能被設計為以這種方式作業,所以我正在尋找一種解決方法。
我非常依賴于使用.opacity()選項卡來顯示和隱藏我的應用程式的不同部分。我不使用if子句,因為每次用戶更改選項卡時,您都必須等待整個視圖重建,這非常慢。
這是一個演示問題的基本示例:
struct ContentView: View {
@State var viewAVisible = false
var body: some View {
VStack{
ZStack{
Text("View A Visible")
.frame(width: 500, height: 500)
.background(Color.blue)
.help("This is View A's help text. It should be invisible when View A is invisible.")
.opacity(viewAVisible ? 1 : 0)
Text("View B Visible")
.frame(width: 500, height: 500)
.background(Color.gray)
.opacity(viewAVisible ? 0 : 1)
}
Button("Toggle"){
viewAVisible.toggle()
}
}.padding()
}
}
默認的應用程式狀態是隱藏“視圖 A”Text()而只顯示“視圖 B” Text()。但是如果您將滑鼠懸停在視圖 B 上,您仍然會看到視圖 A 的.help文本:

在我看來,如果一個視圖有.opacity(0)那么它的幫助文本不應該出現。但無論如何,我需要找到一種方法來解決這個問題。
我想過做這樣的事情:
.help(viewAVisible ? "This is View A's help text..." : "")
...但這并不能跨越我的應用程式中的數十個視圖——尤其是在不知道其父視圖是顯示還是隱藏的子視圖中。當我將滑鼠懸停在我的應用程式上時,我會看到到處都是大量視圖的幫助文本,即使它們是不可見的。??
有沒有人遇到過這個問題或對如何處理它有任何建議?
uj5u.com熱心網友回復:
看起來像一個錯誤(它們不會洗掉跟蹤矩形),這是解決方法的演示 - 將幫助標簽移到后臺并手動洗掉(使用 macOS 12.0.1 測驗)
Text("View A Visible")
.frame(width: 500, height: 500)
.background(Group {
if viewAVisible {
Color.blue.help("This is View A's help text. It should be invisible when View A is invisible.")
} else {
Color.clear
}
})
.opacity(viewAVisible ? 1 : 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372528.html
