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
相关产品推荐
相关产品推荐

