NSProgressIndicator не отображается во время запуска приложения - PullRequest
0 голосов
/ 17 марта 2020

Это должно быть очень просто, но я не могу его найти.

Я хочу показать NSProgressIndicator неопределенный стиль счетчика для моего NSViewController, чтобы он отображался в середине представления при запуске приложения. (похоже на Xcode). Как только все данные загружены (в фоновом потоке), я возвращаюсь в основной поток, скрываю счетчик и показываю содержимое.

Все работает, как и ожидалось, за исключением того, что счетчик не отображается.

В раскадровке я добавил спиннер как вспомогательное представление основного вида, и добавил ограничения centerX и centerY, также в раскадровке.

enter image description here

enter image description here

Затем в viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()

    progressSpinner.isHidden = false
    progressSpinner.startAnimation(self) // <-- do I use self here?
}

и после загрузки данных:

func didFinishLoading() {
    progressSpinner.stopAnimation(self) // <-- do I use self here?
    progressSpinner.isHidden = true

    showData()
}

Чего мне здесь не хватает?

1 Ответ

0 голосов
/ 17 марта 2020

Хорошо, я нашел проблему. Флажок «Скрытый» в раскадровке был отмечен.

Даже с progressSpinner.isHidden = false в viewDidLoad спиннер оставался невидимым. Снятие отметки с этого поля решило ее.

enter image description here

РЕДАКТИРОВАТЬ

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

override func viewDidLoad() {
    super.viewDidLoad()

    progressSpinner.removeFromSuperview()
    view.addSubview(progressSpinner, positioned: .above, relativeTo: nil)

    progressSpinner.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    progressSpinner.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

    progressSpinner.isHidden = false
    progressSpinner.isDisplayedWhenStopped = false

    progressSpinner.startAnimation(self)
}
...