SwiftUI SplitView等でViewサイズ変更を検知、処理実行

GeometryReaderを使用して変更を監視

onChange(of:perform:)でGeometryReaderを値を監視。

var body: some View {
    GeometryReader { geometry in
        VStack {
            //
            //View
            //
        }
        .onChange(of: geometry.size.width, perform: {newValue in
            print("geometry onChange:\(geometry.size.width):\(geometry.size.height)")
            print("UIScreen:\(UIScreen.main.bounds.width):\(UIScreen.main.bounds.height)")
            //
            // 変更によってしたい処理
            //
        })
    }
}

回転で確認

heightはSafeArea分少なくなります。

// 縦に
geometry onChange:1024.0:1322.0
UIScreen:1024.0:1366.0

// 横に
UIScreen:1366.0:1024.0
width:1366.0,height980.0

画面サイズに合わせる

.edgesIgnoringSafeArea(.all)を使用します。

var body: some View {
    GeometryReader { geometry in
        VStack {
            //
            //View
            //
        }
        .onChange(of: geometry.size.width, perform: {newValue in
            print("geometry onChange:\(geometry.size.width):\(geometry.size.height)")
            print("UIScreen:\(UIScreen.main.bounds.width):\(UIScreen.main.bounds.height)")
            //
            // 変更によってしたい処理
            //
        })
    }
    .edgesIgnoringSafeArea(.all)
}
// 縦に
eometry onChange:1024.0:1366.0
UIScreen:1024.0:1366.0

// 横に
geometry onChange:1366.0:1024.0
UIScreen:1366.0:1024.0

SwiftSwift,SwiftUI

Posted by shi-n