【Swift】.presentationDragIndicator(_:)とは?意味や使い方をわかりやすく解説

B!

シートUIの上端にある細い横線(つまみ)の表示をコントロールできるのが .presentationDragIndicator(_:) です。

ユーザーに「ここをドラッグすると高さを変えられる/下にスワイプで閉じられる」というヒントを与える役割があり、.sheet と組み合わせて使います。

.presentationDetents で高さを段階指定している場合に特に効果的です。

.presentationDragIndicator(_:)とは?

.presentationDragIndicator(_:) は、シートのドラッグインジケータの表示モードを指定するSwiftUIの修飾子です。

指定できるモードは次の3種類です。

  • .visible:常に表示して、ドラッグ可能であることを明示します。
  • .hidden:常に非表示にして、視覚ノイズを抑えます。
  • .automatic:システムが状況に応じて表示・非表示を判断します。

.presentationDragIndicator(_:) はiOS 16以降で利用できます。

インジケータは見た目の手がかりであり、これ自体はタッチ領域やドラッグ可否を変えません。

使い方

まず最小構成での使い方を説明します。

.sheet の中で表示するビューに対して修飾子を付けるだけで機能します。

この指定により、ユーザーは上端のインジケータを“手掛かり”にしてドラッグ操作に気づきやすくなります。

具体例

ここでは実務で役立つ3パターンを紹介します。コードの後に、どんなときに有効かも説明します。

1. 部分シートで操作を促したい(.visible

高さをスナップで切り替えるUIでは、visibleではっきり表示するのが親切です。

使いどころ
検索フィルタやコメントパネルなど、「まずは小さく出す → 必要に応じて広げる」設計で、ユーザーに操作を学習してもらいやすくなります。

2. 誤閉じを避けたいときに隠す(.hidden+ロック)

「閉じられそう」な見た目のままだと誤操作が増えます。

見た目と挙動を揃えましょう。

使いどころ
未保存データがある編集画面など、誤って閉じてほしくないケース。

インジケータを隠すだけでなく、.interactiveDismissDisabled(true)挙動も一致させるのがポイントです。

3. システムに任せて自然に(.automatic

迷ったらまずは自動。

状況に応じて最適化されます。

使いどころ
内容や端末によって最適解が変わりそうな初期段階。

まず .automatic で出し、ユーザーテスト結果に合わせて .visible / .hidden に調整します。

注意点

.presentationDragIndicator(_:) は便利な一方で、見た目と実際の挙動の不一致がユーザーの混乱を招きやすい点に注意しましょう。

  • .presentationDragIndicator見た目だけを変えます。ドラッグ可否や閉じ可否は変えません。閉じ動作を止めたいときは .interactiveDismissDisabled を併用してください。
  • .sheet にのみ有効です。fullScreenCover には効果がありません。
  • .presentationDetents と組み合わせる際は、“ドラッグできそう”な表示が実際の挙動と矛盾しないようにしましょう。
  • 対象は iOS 16以降。それ以前をサポートする場合は代替のUI設計(ボタン誘導など)を検討します。

まとめ

.presentationDragIndicator(_:) は、シートの「ドラッグできる手掛かり」を提供し、ユーザーの操作発見性を高める小さなパーツです。

まずは .automatic で様子を見て、操作を促したいときは .visible誤閉じを避けたいときは .hidden.interactiveDismissDisabled を併用する、という使い分けが実践的です。

.presentationDetents や背景・背面操作の各修飾子と組み合わせ、見た目・操作・干渉範囲を一貫して設計しましょう。

参考リンク

最新の記事はこちらから