見出し画像

[SwiftUI] Stackの使い方

SwiftUIにはレイアウトを組み立てるためにStackという構造体を使用できます😌

ContentViewのbodyプロパティでは、必ず1つだけビューを返すようにしなければいけません。
そのため、TextビューやImageビューを複数使用する場合は、1つのビューにまとめる必要があります。

その際に使用できるのが Stack です🎉

Stackの種類

Stackには VStackHStackZStack の3つの種類があります。

VStack
垂直方向に配置できるスタック

名称未設定のアートワーク 1

HStack
水平方向に配置できるスタック

名称未設定のアートワーク 16

ZStack
Z軸にビューを重ねて配置できるスタック

名称未設定のアートワーク 15

この3つです

Stackの使い方

3つそれぞれのイニシャライザから、使い方をみていきましょう!

VStack

VStack(alignment: HorizontalAlignment, spacing: CGFloat?, content: () -> _ )

alignment
水平方向の配置方法をHorizontalAlignmentプロパティを使って指定します。
指定できるのは以下の3つで、デフォルトはcenterです。

・leading・・・左寄せ
・center・・・中央寄せ
・trailing・・・右寄せ

spacing
VStackに入れた子ビュー同士の間隔を指定します。
デフォルトはnilで、システムのデフォルトの幅が適用されます。

content
VStackに配置する子ビューを指定します(10個まで)。

VStack(alignment: .leading, spacing: 30) {
   Text("Text View 1")
   Text("テキストビュー2")
   Text("てきすとびゅう〜3")
}

名称未設定のアートワーク 18

HStack

HStack(alignment: VerticalAlignment, spacing: CGFloat?, content: () -> _ )

alignment
垂直方向の配置方法をVerticalAlignmentプロパティを使って指定します。
指定できるのは以下の5つで、デフォルトはcenterです。

・top・・・上寄せ
・center・・・中央寄せ
・bottom・・・下寄せ
・firstTextBaseline・・・最初の文字のベースラインに合わせる
・lastTextBaseline・・・最後の文字のベースラインに合わせる

spacing
HStackに入れた子ビュー同士の間隔を指定します。
デフォルトはnilで、システムのデフォルトの幅が適用されます。

content
HStackに配置する子ビューを指定します(10個まで)。

HStack(alignment: .firstTextBaseline, spacing: 20) {
   Text("View 1")
   Text("ビュー2").font(.largeTitle)
   Text("びゅう〜3").font(.caption)
}

名称未設定のアートワーク 17

ZStack

ZStack(alignment: Alignment, content: () -> _)

alignment
重なるビューの配置方法をAlignmentプロパティを使って指定します。
指定できるのは以下の9つで、デフォルトはcenterです。

・center・・・中央寄せ
・top・・・上寄せ
・bottom・・・下寄せ
・leading・・・左寄せ
・trailing・・・右寄せ
・topLeading・・・左上寄せ
・topTrailing・・・右上寄せ
・bottomLeading・・・左下寄せ
・bottomTrailing・・・右下寄せ

content
ZStackに配置する子ビューを指定します(10個まで)。

ZStack(alignment: .top) {
   Image("swift")
   Text("すうぃふと!!").font(.largeTitle)
}

スクリーンショット 2020-09-18 21.34.21


VStack、HStack、ZStackすべてを入れ子にしてこんな風にレイアウトを組むこともできます!

var body: some View {
   VStack(alignment: .leading) {
       VStack(alignment: .leading, spacing: 30) {
           Text("1.はじめに")
           Text("2.Stackの種類")
           
           HStack(alignment: .firstTextBaseline, spacing: 20) {
               Text("VStack")
               Text("HStack")
               Text("ZStack")
           }
       }
       ZStack(alignment: .bottom) {
           Image("swift")
               .resizable()
               .frame(width: 300, height: 170)
           Text("Swfit UI")
       }
   }
}

スクリーンショット 2020-09-18 21.52.28


Stackを使うと、ビューのまとまりがわかりやすくレイアウトできますね🎉


SwiftUI勉強中

SwiftUI徹底入門という本で勉強中です!
はじめてSwiftUIを使う方でも、とても丁寧に解説してくださっているのでわかりやすいです😀
パラダイムシフトに乗り遅れるな〜!🏃‍♀️


この記事が気に入ったらサポートをしてみませんか?