純正の設定画面みたいな感じで、2-paneなUISplitViewControllerをモーダル表示してるところが
iPadOS18だと、1-paneのNavigationViewControllerみたいになっていて。
なんでかなーと調べたのメモ。
結論
1-paneになる原因:
UserInterfaceSizeClass
が Compact
になっているから。
UISplitViewController.isCollapsed がソレらしい。
みんなもデバッガで確認してみよう。
When collapsed, the displayMode property has no impact on the appearance of the split view interface
こいつがtrueな状況だと、displayMode
は無視される
-> Compact
の表示になって、1-painにされてしまう
対策
- 幅を増やす
- Compactなんて認めない
幅を増やす
表示幅が足りない(と勝手に決めつけられてる)のが原因なので、幅を増やせば解決。
self.preferredContentSize = CGSize(width: 640, height: 640)
表示してるモーダルの大きさをpreferredContentSizeで広げてやれば解決。
なお、指定したところでOS側に勝手に調整される。
Compactなんて認めない
if #available(iOS 17.0, *) {
splitVC.traitOverrides.horizontalSizeClass = .regular
}
文句言わずにRegularで表示しろよ、とtraintOverridesする。
雑感
iPadOS 18、だいぶひどい。
sizeClass、だいぶ前からある割に成功する未来が全然見えないが、どうしてこのタイミングで強行したんだろう・・・?