SwiftUI新自定义工具栏在Catalyst环境下崩溃求助
SwiftUI工具栏在Catalyst环境下崩溃问题
我正在试用SwiftUI中的新工具栏,发现它在Catalyst环境下存在问题(iPad端运行正常)。请问是否有其他开发者遇到相同问题?
以下是我的代码:
import SwiftUI struct ContentView: View { var body: some View { NavigationStack { List { Text("1") Text("2") Text("3") Text("4") Text("5") }.toolbar(id: "ytuj") { ToolbarItem(id: "1", placement: .primaryAction) { Image(systemName: "heart") } ToolbarItem(id: "2", placement: .primaryAction) { Image(systemName: "heart") } ToolbarItem(id: "3", placement: .secondaryAction) { Image(systemName: "heart.fill") } ToolbarItem(id: "4", placement: .secondaryAction, showsByDefault: false) { Image(systemName: "heart.fill") } }.toolbarRole(.editor) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
在Catalyst环境下运行时,尝试自定义工具栏会导致崩溃。是不是我的代码存在问题?
补充说明:以下是崩溃的错误信息,这只是一个简单的示例程序,情况非常奇怪!
*** Assertion failure in -[NSPasteboardItem setPropertyList:forType:], NSPasteboardItem.m:210
解答
- 这是SwiftUI Catalyst的已知兼容性Bug,和你的代码逻辑无关,已有不少开发者反馈过相同问题。触发原因是同时给工具栏设置
id参数和.toolbarRole(.editor)时,会引发NSPasteboard相关的断言崩溃。 - 临时修复方案:
- 移除工具栏的
id参数,将.toolbar(id: "ytuj") { ... }改为.toolbar { ... } - 如果必须保留工具栏ID,可以尝试去掉
.toolbarRole(.editor),使用默认的工具栏角色 - 升级到最新版本的Xcode和系统SDK,苹果后续更新大概率会修复该问题
- 移除工具栏的
内容的提问来源于stack exchange,提问作者gm_
相关产品推荐
相关产品推荐

