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で獲得した広さです。
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色が隠れてしまうのがイメージできるでしょうか?
ZStack {
Color.mint
VStack{
Color.red
}
.padding()
}
.padding(30) ・・・・・・・・(1)
ここで2パターンの処理を見てみます。
左下が(1)のpadding(30)がある画面、右下が(1)のpaddingを記載しなかった時の画面です。
ZStackでpaddingを利用すると使える画面が減ってしまいそうです。
また、奥にZStackがある場合は、上位のVStackやHStackでpaddingを使わないと、ZStackが見えなくなりそうです。
上位のVStackやHStackで利用するView部品が、TextとかButtonなら問題ありませんが、画面構成と部品の大きさをしっかり把握した上でpaddingは上手に利用しないといけませんね。
コメント