【SwiftUI】paddingを理解する

SwiftUI
この記事は約3分で読めます。

ひかる
ひかる

CSSでも余白のために使うpadding、SwiftUIでも同じような機能なのか調べてみよう!

padding(インスタンス メソッド)

よく利用するpadding()は、指定したビューの各端に特定のパディング量を追加するメソッドです。日本語訳だと、芯、詰め物など。余白というイメージですね。

func padding(_ length: CGFloat) -> some View

CGはAppleの描画系フレームワーク(Core Graphics)の略

パラメータのlengthは、全てのエッジ(上下左右)に埋め込むためのポイント単位の量。
戻り値は、パディングを挿入したViewとなります。

Textでのpadding(パディング)

paddingを詳しく理解するために、4パターンのテキスト(borderを付けて)を見てみることにしました。

下記コードの(1)と(2)と(3)では、10ポイントと20ポイントと0ポイントのスペースの広さをなんとなく実感できます。文字と枠線のスペースがpaddingで獲得した広さです。

Swift
VStack {
    Text("20ポイントのpadding") ・・・・(1)
          .padding(20)
          .border(.black)

    Text("10ポイントのpadding") ・・・・(2)
          .padding(10)
          .border(.red)

    Text("padding無し")     ・・・・(3)
          .border(.blue)

    Text("paddingの記載順")   ・・・・(4)
          .border(.yellow)
          .padding(10)
}

padding(パディング)の記載順には注意が必要

上記コードの(2)と(4)では、パディングは共に10ですが、borderとpaddingの記載順序が逆になっています。

(2)は10ポイントのpaddingを獲得しViewを広げてから枠線で囲っています。

それに対して、

(4)はpaddingなし(0ポイント)の状態で枠線を囲ってからpaddingしています。(3)と(4)との表示スペースから結果的にpaddingによって余白10ポイントは獲得していますが、モディファイアの記載順には注意が必要です。

背景でのpadding(パディング)

次はView部品ではなくて、背景そのものとpaddingの関係を見ていきます。

画面の最奥(ZStack)にmint色を、その上にVStackを使ってred色を重ねました。
paddingが無い場合は、最奥のmint色が隠れてしまうのがイメージできるでしょうか?

Swift
ZStack {
  Color.mint
            
    VStack{
      Color.red
    }
    .padding()
}
.padding(30) ・・・・・・・・(1)

ここで2パターンの処理を見てみます。
左下が(1)のpadding(30)がある画面、右下が(1)のpaddingを記載しなかった時の画面です。

padding(30)あり
padding(30)なし

ZStackでpaddingを利用すると使える画面が減ってしまいそうです。
また、奥にZStackがある場合は、上位のVStackやHStackでpaddingを使わないと、ZStackが見えなくなりそうです。

上位のVStackやHStackで利用するView部品が、TextとかButtonなら問題ありませんが、画面構成と部品の大きさをしっかり把握した上でpaddingは上手に利用しないといけませんね。

コメント

タイトルとURLをコピーしました