自从升级到Mac OS Sierra和新的XCode版本后,每次为每个NSToolbarItem启动应用程序时都会出现以下错误:
Example 1:
2016-09-29 12:46:58.659879 AppTest[] NSToolbarItem (<NSToolbarItem: >) had to adjust the size of <NSPopUpButton: > from {130, 26} to the expected size of {132, 27}. Make sure that this toolbar item view has a valid frame/min/max size. This is an app bug, please do not file a bug against AppKit or NSToolbar! Break on _NSToolbarAdjustedBorderedControlSizeBreakpoint
Example 2:
2016-09-29 12:46:58.666074 AppTest[] NSToolbarItem (<NSToolbarItem: >) had to adjust the size of <NSButton: > from {60, 25} to the …Run Code Online (Sandbox Code Playgroud) 默认情况下,在使用 SwiftUI 的 macOS 应用程序上,窗口关闭后不会恢复窗口大小。
有没有办法在关闭应用程序之前保留用户给出的任何大小和位置。本质上我希望关闭和打开的行为与用户退出和打开应用程序时的行为相同?
这里有什么需要补充的吗?
import SwiftUI
@main
struct testApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Run Code Online (Sandbox Code Playgroud) 当应用程序冷启动时, @Environment(. undoManager ) 为零,并保持为零,直到用户更改视图。当视图更改时,undoManager 将被设置并且撤消功能可用。
在下面的 gif 中,您可以看到在用户切换到新视图“焦点”然后再返回之前,撤消操作是不可用的。
以下是设置 undoManager 环境的 SwiftUI 代码:
@Environment(\.managedObjectContext) private var viewContext
@Environment(\.undoManager) private var undoManager
Run Code Online (Sandbox Code Playgroud)
[...]
listOfCards.task{
viewContext.undoManager = undoManager //nil when starting from cold start
}
Run Code Online (Sandbox Code Playgroud)
@main App 实例化一个 NSPersistentCloudKitContainer 并将其设置为 ManagedObjectContext
mainView
.environment(\.managedObjectContext, persistenceController.container.viewContext)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过以下一些方法来解决此问题:
A) 在每个视图中添加以下内容...
.onChange(of: undoManager) { _ in
print(undoManager)
viewContext.undoManager = undoManager}
Run Code Online (Sandbox Code Playgroud)
检测何时设置 undoManager 并将其链接到 viewContext。运气不好,没有接到电话。
B)还尝试添加观察者:
private let undoObserver = NotificationCenter.default.publisher(for: .NSUndoManagerCheckpoint)
.onReceive(undoObserver, perform: { _ in
print(undoManager)
viewContext.undoManager = undoManager
})
Run Code Online (Sandbox Code Playgroud)
同样不幸的是,它唯一起作用的就是转到另一个视图并返回,然后 UndoManager 设置正确。有任何想法吗?我错过了一些明显的东西吗?