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)
我在 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)