Когда приложение iOS запускается под Mac Catalyst, появляется новое свойство UITraitCollection
, связанное с состоянием «неактивный внешний вид». Но эта черта не является общедоступной, и я ищу правильный способ отреагировать на этот шанс.
Чтобы прояснить это, полезно создать iOS Master / Detail проект с использованием Xcode 11 и включить Mac,Затем в методе SceneDelegate willConnectTo
добавьте строку:
splitViewController.primaryBackgroundStyle = .sidebar
, а в методе MasterViewController cellForRowAt
добавьте строку:
cell.accessoryType = .detailButton
Теперь запустите приложение на Mac. В то время как приложение имеет фокус, обратите внимание на полупрозрачную мастер-панель разделенного вида и обратите внимание, что кнопки подробностей в ячейках синие (нажмите + пару раз, чтобы добавить несколько строк).
Пока это видно, переместите фокус на другое приложение. Теперь обратите внимание, что мастер-панель разделенного вида больше не является полупрозрачной, а синие кнопки сведений в ячейках теперь серые.
Когда приложение получает или теряет фокус, я обнаружил, что traitCollectionDidChange
вызывается метод контроллеров представлений и вызывается метод представлений tintDidChange
.
Проблема в том, что в UITraitCollection
нет общедоступного API, связанного с изменяемой характеристикой. Если вы установите точку останова в traitCollectionDidChange
и напечатаете значение previousTraitCollection
или self.traitCollection
, то, похоже, ничего не изменится.
Но если вы проверите детали previousTraitCollection
вПеременная отладчика просмотра, вы можете увидеть частный словарь с именем _clientDefinedTraits
. Этот словарь содержит одну пару ключ / значение. Ключ _UITraitNameHasInactiveAppearance
с истинным / ложным значением.
Ничего подобного не происходит при запуске под iOS, только под macOS.
Моя цель - иметь возможность реагировать на это "неактивное"изменение черты внешнего вида, но я бы предпочел не копаться в этих личных данных.
Есть ли что-то, чего мне не хватает для получения этой черты "неактивного внешнего вида"? В идеале это было бы по принципу hasDifferentColorAppearance
.