SwiftUI hidden导致编译器卡死问题
SwiftUI hidden导致编译器卡死问题

SwiftUI hidden导致编译器卡死问题

在使用SwiftUI显示/隐藏视图的过程中发现,当添加hidden尝试隐藏视图时:

.background {
    ZStack {
        Color.gray.opacity(0.3)
        Image(systemName: "plus.magnifyingglass")
            .foregroundColor(.white)
    }
    .hidden(hoveringIndex != index)

Xcode就会卡死在编译的状态。

经查询发现,这是SwiftUI 编译器的一个已知 Bug(特别是对 .hidden(condition) 扩展的调用解析不佳),尤其在 macOS 的复杂嵌套结构里容易触发。

因此,可以使用 opacity(…) 替代 hidden:

.opacity(hoveringIndex == index ? 1 : 0)
.animation(nil, value: hoveringIndex) // 禁用动画,防止 transition 造成 rebuild

或者使用ZIndex切换视图,防止视图重建:

ZStack {
    Image(nsImage: item.image)
        .resizable()
        .scaledToFill()
        .frame(width: 35, height: 35)
    Group {
        Color.gray.opacity(0.3)
        Image(systemName:"plus.magnifyingglass")
            .foregroundColor(.white)
            .allowsHitTesting(false)
    }
    .frame(width: 35, height: 35)
    .zIndex(hoveringIndex == index ? 1 : -1)    // 根据 hoveringIndex 设置 zIndex 层级
}

这两种方法都可以替代hidden。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注