Как я могу определить, когда многозадачность iPad (т. е. другое приложение, выведенное на экран рядом с моим приложением) становится активным?
У меня есть UISplitViewController
со следующими настройками, как показано ниже:
preferredDisplayMode = .twoBesideSecondary
preferredSplitBehavior = .tile
setViewController(SidebarVC(), for: .primary)
setViewController(SuppVC(), for: .supplementary)
setViewController(SecondaryVC(), for: .secondary)
В альбомной ориентации достаточно места для всех 3 столбцов (.primary, .supplementary, .secondary
). В портретной ориентации или при многозадачности ширина экрана меньше, а мой третий столбец (.secondary
) сжимается до очень узкой ширины. Класс горизонтального размера остается обычным, поэтому я не могу использовать его для его обнаружения. (Когда класс горизонтального размера становится компактным, мой UISplitViewController.compact
отображается и работает нормально).
Я хочу изменить свойство UISplitViewController.displayMode
на .twoDisplaceSecondary
, когда экран уже, но класс горизонтального размера остается обычным (т. е. в портретной ориентации или когда другое приложение работает в многозадачном режиме). Это позволит вытолкнуть 3-ю колонку за пределы экрана (сместить), а не раздавить.
Прекрасным примером точного поведения, которое я ищу, является приложение «Контакты» на iPad в iOS 14. Оно использует макет из трех столбцов, по-видимому, с displayMode .tile
. Когда приложение развернуто в альбомной ориентации на весь экран, отображаются все 3 столбца, и остается достаточно места, чтобы не происходило сжатие. Однако, если вы переводите другое приложение в режим многозадачности (таким образом делая ширину приложения «Контакты» уже, но класс горизонтального размера остается обычным), displayMode, кажется, изменяется на .twoDisplaceSecondary
, а 3-й столбец выталкивается за пределы экрана, а не сжимается.
Я думаю, что могу управлять изменениями ориентации с помощью метода viewWillTransitionToSize()
, но мне не удалось найти делегата или другого способа определить, когда приложение уже, но все же с классом горизонтального размера .regular
, таким как приложение «Контакты», по-видимому, в состоянии сделать.
Скриншоты, чтобы показать, на что я ссылаюсь:
Вы можете видеть, что на втором снимке экрана 3-й столбец смещается, а не сжимается, когда не хватает места.