この記事では、VStack
やHStack
に枠線をつける方法を紹介します。
このような感じです。
実装方法
実装方法は以下の2パターンあります。それぞれ解説していきます。
- borderを使った方法
- overlayを使った方法
1. borderを使った方法
VStack、HStackにモディファイアとして、.border(Color.blue, width: 3)
をつけるだけです。第一引数にColor型、第二引数に線の太さを記述します。
VStack { Text("Hello, world!") .padding() Text("Hello, world!") .padding() Text("Hello, world!") .padding() } .border(Color.blue, width: 3)
しかしこの方法では、丸くできません。。
.cornerRadius(30)
をつけて丸くしようとすると、このようになります。
そこで、次のoverlayを使います。
2. overlayを使った方法
以下のように、2行のモディファイアをつけます。cornerRadius: 30
のところで丸みを変えられて、(Color.blue, lineWidth: 3)
のところで色と太さが変更できます。
VStack { Text("Hello, world!") .padding() Text("Hello, world!") .padding() Text("Hello, world!") .padding() } .overlay(RoundedRectangle(cornerRadius: 30) .stroke(Color.blue, lineWidth: 3))
overlayは、VStackに線をつけているのではなく、VStackの上にRoundedRectangleを重ねて置いてそこに枠線をつけているというイメージです。
背景をつけてみるとイメージしやすいかと思います。
緑のViewがVStackです。枠線がついているのはVStackではなく、RoundedRectangleです。
もし、この状態で背景も丸くしたいというなら、RoundedRectangleでクリッピングしちゃいましょう。
VStack { Text("Hello, world!") .padding() Text("Hello, world!") .padding() Text("Hello, world!") .padding() } .background(.green) .overlay(RoundedRectangle(cornerRadius: 30) .stroke(Color.blue, lineWidth: 3)) .clipShape(RoundedRectangle(cornerRadius: 30))
こんな感じに切り取れました。