【Swift】Overlay

Swift

SwfftUIのOverlayに関してまとめます。

TextFieldに枠線を使う際になんとなく使っていたのですが、自分の勉強を兼ねてまとめました。

Viewの上に別のViewを重ねられるOverlayについて簡単にまとめます!

Oberlayとは?

Viewの上にViewを重ねる方法の一つです。

ZStackのようなものと思って使用しても問題ないです。

(ただし、こちらはモディファイアの一種なのでVStackのようなビュー全体を囲むようなレイアウト形式とは役割やpaddingなどの当たり方が異なります。)

使い方

.overlay(alignment: Alignment) {
   Content
 }

alignment(省略可)

重ねるViewの配置位置を決めます。

Alignmentで指定している位置で配置することが可能です。

デフォルトでは、.centerが指定されています。

【!注意点】

注意点として位置は重ねるViewの位置を変更します。

重ねるビューの中身の要素位置は別で指定する必要があります。

Content

重ねる要素を指定します。

要素の上にViewを重ねる

TextFieldに角丸をつけてみます。

overlayで角丸の四角形をTextFieldに重ねることで枠線をつけます。

枠線を柔軟に変えることができるので重宝します。

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            TextField("Sample",text: .constant(""))
                .padding()
                .overlay(alignment: .center){
                    // borderを表示する
                    RoundedRectangle(cornerRadius: 5)
                        .stroke(Color.black, lineWidth: 2)
                }
        }
        .padding()
    }
}

Viewの上に図形を重ねる(中央配置)

Viewの上に図形を重ねてみましょう

四角形の上に円を重ねます。

青い四角形の上にオレンジ色の丸を乗せました。今回はoverlayにalignmentを指定していないので中央に配置されています。

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Rectangle()
                .fill(.blue)
                // overlayで正方形に丸を重ねる
                .overlay {
                    Circle()
                        .fill(.orange)
                }
        }
        .padding()
    }
}

Viewの上に画像を重ねる

画像も重ねられます。

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Rectangle()
                .fill(Color.blue)
                .padding()
                .overlay(alignment: .center) {
                    // 画像を表示する
                    Image("SampleImage1")
                        .resizable()
                        .frame(width: 200, height: 200)
                        .background(Color.blue)

                }

        }
        .padding()
    }
}

コメント

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