iPadマルチタスク(つまり、別のアプリが画面に表示され、アプリと並べて表示される)がアクティブになったときを検出するにはどうすればよいですか?
私はUISplitViewController
以下のように設定された以下のパラメータを持つを持っています:
preferredDisplayMode = .twoBesideSecondary
preferredSplitBehavior = .tile
setViewController(SidebarVC(), for: .primary)
setViewController(SuppVC(), for: .supplementary)
setViewController(SecondaryVC(), for: .secondary)
横向きでは、3列すべてに十分なスペースがあります(.primary, .supplementary, .secondary
)。ポートレートやマルチタスクの場合、画面の幅が狭くなり、3列目(.secondary
)が非常に狭い幅に押しつぶされます。水平サイズのクラスは通常のままなので、それを使用して検出することはできません。(横サイズのクラスがコンパクトになると、私のUISplitViewController.compact
ショーと動作はうまくいきます)。
UISplitViewController.displayMode
プロパティを.twoDisplaceSecondary
画面が狭い場合に変更したいのですが、水平サイズのクラスは通常のままです(つまり、縦向きの場合、または別のアプリがマルチタスクの場合)。これにより、3番目の列を押しつぶすのではなく、画面外に押し出す(移動させる)ことができます。
私が探している正確な動作の完璧な例は、iOS 14のiPadのContactsアプリです。これは、displayModeがのように見える3列のレイアウトを使用しています.tile
。アプリが横向きで全画面表示になると、3つの列すべてが表示され、押しつぶされないように十分なスペースがあります。ただし、別のアプリをマルチタスクに移行すると(したがって、連絡先アプリの幅は狭くなりますが、水平サイズのクラスは通常のままです)、displayModeがに変更されたように見え.twoDisplaceSecondary
、3番目の列が押しつぶされるのではなく画面外に押し出されます。
viewWillTransitionToSize()
メソッドを使用して向きの変更を管理できると思いますが、アプリが狭いことを検出するデリゲートやその他の方法を見つけることができませんでしたが.regular
、Contactsアプリのように水平サイズのクラスでもできるようです。 。
2番目のスクリーンショットでは、十分なスペースがない場合、3番目の列が押しつぶされるのではなく移動していることがわかります。
私はそれがBOTHに設定することが重要だと考え出した.preferredDisplayMode
と.preferredSplitBehavior
ビュー遷移を。どちらか一方を設定すると、多くの奇妙な動作が発生します。
私はこのような場合のために作品を考え出しどのような将来の読者のために設定されるpreferredDisplayMode = .twoBesideSecondary
とpreferredSplitBehavior = .tile
、画面は十分な広さであるときは、設定preferredDisplayMode = .oneBesideSecondary
とpreferredSplitBehavior = .displace
画面が狭い場合。view.frame.size.width <1194かどうかをチェックする関数を使用して、画面が全角かどうかを判断しました。向きを使用すると、アプリが別のアプリと並んでいる場合にのみ問題が発生するためです。私は、これを呼び出すviewDidLoad
だけでなく、としてviewWillTransition(toSize:)
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加