NSSplitVIew - 自动保存分隔符位置不适用于启用自动布局

Jor*_*ith 13 macos cocoa objective-c nssplitview autolayout

启用自动布局后,通过在界面构建器中为NSSplitView设置自动保存名称自动保存分隔符位置会导致每个分隔符在应用程序重新启动时完全折叠.禁用自动布局允许自动保存工作完美.

我在一个新的Xcode项目中尝试了这个,同样的结果.这是一个错误,还是一个已知的不兼容问题?

我怎么能解决这个问题(如果它是一个bug,还是有解决方法)?

csc*_*sch 27

我发现在启用自动布局的故事板中进行设置IdentifierAutosave不起作用.但是,一旦我以autosaveName编程方式设置它,它确实对我有用.

class MySplitViewController: NSSplitViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        splitView.autosaveName = "Please Save Me!"
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于Swift 4,它是:`splitView.autosaveName = NSSplitView.AutosaveName(rawValue:"请救救我!真的!") (3认同)
  • 在 Swift 5 中又回到了 `splitView.autosaveName = "Please Save Me!"` (3认同)

mar*_*rux 9

我就遇到了这个问题为好,我发现我需要设置identifierautosaveName为NSSplitView价值,他们需要被设置为不同的值.

  • 我已经为此苦苦挣扎了一段时间,终于找到了你的答案。不敢相信这是像标识符这样愚蠢的东西。但将其设置为与我的自动保存名称不同的名称效果很好。谢谢! (2认同)

Eri*_*ner 6

根据您的情况,当您第一次实例化时,视图可能不在视图层次结构中。如果是这种情况,autosaveName则只有在将视图添加到 windows 视图层次结构之后才设置它才会起作用,因此您可以考虑将自动保存名称设置为

func viewDidMoveToWindow() {
    super.viewDidMoveToWindow()
    splitView.autosaveName = "mySplitViewState"
}
Run Code Online (Sandbox Code Playgroud)


sil*_*sky 1

我发现在自动布局模式下使用 NSSplitView 很糟糕。所以我写了基于自动布局的分割视图:https ://github.com/silvansky/TwinPanelView

它可以存储其手柄位置(非全自动)。