NSSplitViewController не разрушается при создании из раскадровки - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь имитировать поведение таких приложений, как «Заметки» и «Контакты», где при изменении размера окна левый разделенный элемент рухнет. Я не могу воссоздать это поведение при использовании раскадровки.

Если я создаю NSSplitViewController в коде, это работает нормально, однако, если я делаю это через раскадровку, это не работает.

Я создал урезанный проект, единственное отличие которого состоит в том, как создается экземпляр NSSplitViewController:

https://github.com/peteog/NSSplitViewControllerIssue

См. Строки MainWindowController 11 и 12, если вы переключите комментарии, а затем запустите пример приложения, вы увидите разницу в поведении:

import Cocoa

class MainWindowController: NSWindowController {
    override var windowNibName: NSNib.Name? {
        return "MainWindowController"
    }

    override func windowDidLoad() {
        super.windowDidLoad()

//        let splitViewController = NSSplitViewController()
        let splitViewController = NSStoryboard(name: "Storyboard", bundle: nil).instantiateInitialController() as! NSSplitViewController

        let sidebarSplitViewItem = NSSplitViewItem(sidebarWithViewController: SidebarViewController())
        splitViewController.addSplitViewItem(sidebarSplitViewItem)

        let contentSplitViewItem = NSSplitViewItem(viewController: ContentViewController())
        splitViewController.addSplitViewItem(contentSplitViewItem)

        contentViewController = splitViewController
    }    
}

Я не могу сказать, является ли это ошибкой или есть свойство, которое мне не хватает в NSSplitViewController, когда оно исходит от раскадровки, чтобы заставить работать поведение свертывания.

Код:

Code

Раскадровка:

Storyboard

Ответы [ 2 ]

0 голосов
/ 06 августа 2019

(отвечая на мой собственный вопрос)

Я получил отзыв от Apple о радаре, который я подал для этого.Я могу подтвердить, что проблема исправлена ​​в MacOS Catalina beta 5.

0 голосов
/ 15 февраля 2019

В вашем проекте не определен разделенный вид. Когда вы делаете это в коде, вы определяете приоритет удержания, устанавливая поведение разделения представления в качестве боковой панели. Это можно сделать и в конструкторе интерфейсов, если вы не удалили сами разделенные виды из конструктора интерфейсов. Однако свертывание боковой панели должно быть сделано в коде. Глядя на приложение контактов, я полагаю, что они отслеживают размер окна и сворачивают боковую панель, когда она достигает жестко заданного размера.

...