Mac 上的 SwiftUI:即使在不透明度为零的视图中,帮助文本也始终可见

SwiftUI on Mac: Help Text Always Visible Even within View with Zero Opacity

我在 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..." : "")

...但这并不能扩展到我的应用程序中的数十个视图——尤其是在不知道其父视图是显示还是隐藏的子视图中。当我将鼠标放在我的应用程序上时,我看到到处都是大量视图的帮助文本,即使它们是不可见的。

有没有人运行参与其中或对如何处理有任何建议?

看起来像一个错误(它们不会删除跟踪矩形),这是一个解决方法演示 - 将帮助标签移到后台并手动将其删除(使用 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)