You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI macOS下ToolbarItem按钮引用@State变量导致拖拽卡顿问题问询

2021/10/28 更新

使用以下版本构建时问题已修复:

  • macOS 12.0.1 (21A559)
  • Xcode 13.1 (13A1030d)

2021/10/19 更新

  • 已向苹果提交Bug,编号FB9713387
  • 另有用户在推特发布了相关内容

请问有人知晓为什么在[Toolbar -> ToolbarItem -> Button -> Action]中引用@State变量会引发拖拽性能下降、操作卡顿的问题,或是有对应的解决方案吗?

我已完成如下验证:

  • 更换不同类型变量测试
  • 分别在action中使用、不使用该变量测试
  • 相同代码在iOS端运行无任何卡顿
  • 问题复现环境为Xcode 13.0 (13A233)

复现代码

struct ContentView: View {
    
    @State private var iAmAnUnusedBool: Bool = true
    @State private var dragOffset = CGSize.zero
    @State private var width: CGFloat = 200
    
    var body: some View {
        HStack(alignment: .top, spacing: 0) {
            TextEditor(text: .constant("Left Panel"))
            
            Rectangle()
                .frame(width: 6)
                .onHover { $0 ? NSCursor.resizeLeftRight.push() : NSCursor.pop() }
                .gesture(
                    DragGesture(minimumDistance: 0, coordinateSpace: .named("contentView"))
                        .onChanged { gesture in
                            dragOffset = gesture.translation
                        }
                        .onEnded { gesture in
                            let dragOffsetOriginal = dragOffset.width
                            dragOffset = .zero
                            width = width - dragOffsetOriginal
                        }
                )
            TextEditor(text: .constant("Right panel"))
                .frame(width: width - dragOffset.width)
        }
        .toolbar {
            ToolbarItem {
                Button("Button") {
                    iAmAnUnusedBool // 此处引用会导致性能下降
                }
            }
        }
        .coordinateSpace(name: "contentView")
    }
}

无卡顿场景

将iAmAnUnusedBool引用注释后,来回拖拽中间Rectangle(),不会出现卡顿现象
拖拽无卡顿

卡顿场景

取消iAmAnUnusedBool的注释后,来回拖拽中间Rectangle(),快速拖拽1分钟左右会出现明显卡顿
拖拽卡顿


内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:54:05