Apple Developerで全体公開されている内容のまとめです。NDAで保護された内容は含まれていません。スクリーンショットはこの動画から引用しています。
※自分用メモのためiOS中心、RealityKitなど一部省略しております。
Liquid Glass
各プラットフォーム共通で導入された半透明のガラスエフェクト。SwiftUIで通常のViewを記述していれば、大半は自動的に反映される。
ナビゲーション
iPadOS / macOS / tvOSでは、NavigationSplitViewがフロートデザインに変更される。コードの変更は不要。
iOSではTabViewが従来の画面下全部を占領するデザインからコンパクトなデザインに変更された。
ToolBar全体も改良されており、項目ごとに独立し画面遷移時にはアニメーションが自動付与される。
この区切りは新規追加されたToolbarSpacer
で指定できる。
ToolbarSpacer(.fixed, placement: .primaryAction)
スクロールするとToolBarの背景には自動でぼかしが入る。
検索バー
searchableモディファイアを使用した検索バーは、iPhoneは画面下部、iPadOSは右上(右から各言語では左上)に自動で配置される。
TabViewに検索用項目を記述すると、他の項目から独立し自動で折り畳まれる検索ボタンを設置できる。
Tab(role: .serch) { ~ }
その他のView
Toggle()
、Picker()
、Slider()
などの標準的なViewもデザインが変更されており、SwiftUIの標準スタイルを使用していれば自動で適用される。
(注記:ButtonStyleには新たに.glassが追加されている)
カスタムView
新たに追加された.glassEffect()
をViewに適用させることで、標準スタイルが適用されていないViewにもガラス効果を反映させることができる。
iPadOSのウィンドウ表示
iPadでもMacに近いウィンドウ表示が導入され、メニューバーや信号機マークなどMacライクなUIが追加された。
メニューバー
macOSと同様、iPadOSでもマウス操作時用にメニューバーが実装された。macOSと同じく.commands
でメニューバーを表示できる。
ウィンドウサイズ変更への適応
アプリをフルスクリーンで固定するInfo.plistのUIRequiresFullScreen
キーは非推奨となり、ウィンドウサイズを変更できるようにすることが求められる。
詳細はiPadアプリのデザインの向上を参照。
アクセシビリティ
アシスティブアクセス(シンプルで大きな画面になるモード)の場合、AssistiveAccess
でViewを切り分けられるようになる。
ウィジェット
コントロールセンター(macOS / watchOS)
macOS / watchOSのコントロールセンターにiO
S同様にアプリから項目を追加できるようになる。
ウィジェット(visionOS / CarPlay)
visionOS / CarPlayでiOSと同様のウィジェットが使用できる。独自のウィジェットを作成できるほか、macOSと同じくiPhone専用アプリのウィジェットも使用できる。
visionOSではユーザーからの距離に応じて表示を変更できる。
SwiftUIビューの追加
WebView
WKWebViewを使用できるWebView()
が追加。新規追加されたWebPage
モデルを使用して操作することもできる。
struct InAppBrowser: View {
@State private var page = WebPage()
var body: some View {
WebView(page)
.ignoresSafeArea()
.onAppear {
page.load(URLRequest(url: URL))
}
}
}
詳細はSwiftUI向けWebKitの紹介を参照
3Dチャート
Swift ChartsにChart3D
とZ軸のモディファイアが追加され、3Dグラフを表示できるようになった。
複数ファイルのドラック&ドロップ(macOS)
macOSで複数ファイルのドラック&ドロップができるようになった。
また「ドラックしてゴミ箱に入れる」処理などもできるようになった。
リッチテキスト
Text()
やTextEditor()
などでAttributedString(リッチテキスト)に対応する。変数の型をStringからAttributedStringに変更すると、システムが自動で書式設定メニューを追加する。
詳細は「Code Along:SwiftUIのAttributedStringを使って優れたテキスト体験を実現」を参照。